#!/usr/bin/env python3 # -*- coding: utf-8 -*- import json def update_project_units_mapping(): """ 更新projectUnitsMapping.js文件,使用能源项目案例的单元数据 """ # 读取能源项目案例数据 with open("网页未导入数据/能源产业/能源项目案例.json", 'r', encoding='utf-8') as f: energy_projects = json.load(f) print("🔍 开始生成能源项目单元映射数据...") # 构建新的映射数据 mapping_content = """// 项目案例对应单元映射数据 - 能源产业 // 基于 网页未导入数据/能源产业/能源项目案例.json export const projectUnitsMapping = { """ # 统计信息 total_projects = 0 projects_with_compound = 0 projects_with_vertical = 0 # 遍历每个项目,生成映射数据 for project in energy_projects: project_name = project["案例名称"] compound_units_str = project.get("对应单元名称(复合能力课)", "") vertical_units_str = project.get("对应单元名称(垂直能力课)", "") # 解析单元名称(逗号分隔) compound_units = [unit.strip() for unit in compound_units_str.split(",") if unit.strip()] vertical_units = [unit.strip() for unit in vertical_units_str.split(",") if unit.strip()] # 添加映射条目 mapping_content += f' "{project_name}": {{\n' # 复合能力课 mapping_content += ' "compoundUnits": [\n' for unit in compound_units: mapping_content += f' "{unit}",\n' if compound_units: mapping_content = mapping_content.rstrip(',\n') + '\n' projects_with_compound += 1 mapping_content += ' ],\n' # 垂直能力课 mapping_content += ' "verticalUnits": [\n' for unit in vertical_units: mapping_content += f' "{unit}",\n' if vertical_units: mapping_content = mapping_content.rstrip(',\n') + '\n' projects_with_vertical += 1 mapping_content += ' ]\n' mapping_content += ' },\n' total_projects += 1 # 去除最后的逗号 mapping_content = mapping_content.rstrip(',\n') + '\n' mapping_content += '};\n\n' # 添加辅助函数 mapping_content += """// 获取项目的复合能力课程 export const getCompoundUnits = (projectTitle) => { if (!projectTitle) return []; // 直接匹配 if (projectUnitsMapping[projectTitle]) { return projectUnitsMapping[projectTitle].compoundUnits || []; } // 尝试去除后缀后匹配(如"详情") const cleanTitle = projectTitle.replace(/详情$/, ''); if (projectUnitsMapping[cleanTitle]) { return projectUnitsMapping[cleanTitle].compoundUnits || []; } return []; }; // 获取项目的垂直能力课程 export const getVerticalUnits = (projectTitle) => { if (!projectTitle) return []; // 直接匹配 if (projectUnitsMapping[projectTitle]) { return projectUnitsMapping[projectTitle].verticalUnits || []; } // 尝试去除后缀后匹配(如"详情") const cleanTitle = projectTitle.replace(/详情$/, ''); if (projectUnitsMapping[cleanTitle]) { return projectUnitsMapping[cleanTitle].verticalUnits || []; } return []; }; // 获取项目的所有对应单元 export const getProjectUnits = (projectTitle) => { const mapping = projectUnitsMapping[projectTitle]; if (!mapping) return []; return [...mapping.compoundUnits, ...mapping.verticalUnits]; }; """ # 备份原文件 import shutil import datetime backup_file = f"src/data/projectUnitsMapping.js.backup_{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}" shutil.copy("src/data/projectUnitsMapping.js", backup_file) print(f"✅ 已备份原文件到:{backup_file}") # 写入新文件 with open("src/data/projectUnitsMapping.js", 'w', encoding='utf-8') as f: f.write(mapping_content) print(f"\n✅ 成功更新projectUnitsMapping.js文件!") print(f"📊 统计信息:") print(f" - 总项目数:{total_projects}") print(f" - 包含复合能力课的项目:{projects_with_compound}") print(f" - 包含垂直能力课的项目:{projects_with_vertical}") # 显示几个示例 print("\n📋 前3个项目的单元映射示例:") for i, project in enumerate(energy_projects[:3], 1): project_name = project["案例名称"] compound_units_str = project.get("对应单元名称(复合能力课)", "") vertical_units_str = project.get("对应单元名称(垂直能力课)", "") print(f"\n{i}. {project_name}") if compound_units_str: print(f" 复合能力课:{compound_units_str}") if vertical_units_str: print(f" 垂直能力课:{vertical_units_str}") if __name__ == "__main__": update_project_units_mapping()