#!/usr/bin/env python3 # -*- coding: utf-8 -*- import json import re def extract_chemical_student_projects(): """从学生完成的项目.json中提取化工产业数据""" # 读取学生完成的项目数据 with open('网页未导入数据/学生完成的项目.json', 'r', encoding='utf-8') as f: data = json.load(f) chemical_projects = [] # 筛选化工产业相关项目 for item in data: if item.get('所属就业管家') == '化工': unit_name = item.get('单元名称查询', '') ai_projects = item.get('AI项目名称', []) if unit_name and ai_projects: # 清理项目名称,去除序号前缀 cleaned_projects = [] for project in ai_projects: # 去除 "1.", "2." 等序号前缀 cleaned_project = re.sub(r'^\d+\.', '', project).strip() cleaned_projects.append(cleaned_project) chemical_projects.append({ 'unitName': unit_name, 'projects': cleaned_projects }) return chemical_projects def read_clickable_project_data(): """读取学生完成的项目文件夹中的详细数据""" try: with open('网页未导入数据/化工产业/学生完成的项目/化工储罐液位自动补水与搅拌联锁控制.md', 'r', encoding='utf-8') as f: content = f.read() return content except FileNotFoundError: return None def create_updated_project_library(): """创建更新后的项目库数据""" chemical_projects = extract_chemical_student_projects() clickable_content = read_clickable_project_data() print(f"提取到 {len(chemical_projects)} 个化工单元的项目数据") # 生成新的myProjectsData my_projects_data = [] for project in chemical_projects: my_projects_data.append({ "unitName": project['unitName'], "projects": project['projects'] }) # 生成可点击的项目数据 clickable_project = None if clickable_content: # 解析markdown内容创建项目详情 sections = [] lines = clickable_content.split('\n') current_section = None current_content = [] for line in lines: if line.startswith('# '): if current_section: sections.append({ 'title': current_section, 'content': '\n'.join(current_content).strip() }) current_section = line[2:].strip() current_content = [] elif current_section: current_content.append(line) # 添加最后一个section if current_section: sections.append({ 'title': current_section, 'content': '\n'.join(current_content).strip() }) clickable_project = { "id": "clickable-1", "name": "化工储罐液位自动补水与搅拌联锁控制项目", "unitName": "化工PLC可编程逻辑控制系统", "isClickable": True, "content": { "title": "化工储罐液位自动补水与搅拌联锁控制项目", "description": "本项目基于PLC可编程逻辑控制器,实现化工储罐液位的自动监控、补水控制以及搅拌器的联锁保护功能。", "images": [], "sections": sections } } return my_projects_data, clickable_project def update_project_library_file(): """更新ProjectLibraryPage文件""" my_projects_data, clickable_project = create_updated_project_library() # 读取原文件 with open('src/pages/ProjectLibraryPage/index.jsx', 'r', encoding='utf-8') as f: content = f.read() # 替换myProjectsData my_projects_js = json.dumps(my_projects_data, ensure_ascii=False, indent=2) # 替换myProjectsData部分 pattern = r'const myProjectsData = \[[\s\S]*?\];' replacement = f'const myProjectsData = {my_projects_js};' content = re.sub(pattern, replacement, content) # 如果有可点击项目数据,替换clickableProjects if clickable_project: # 构建clickableProjects JavaScript代码 clickable_js = json.dumps([clickable_project], ensure_ascii=False, indent=2) clickable_pattern = r'const clickableProjects = \[[\s\S]*?\];' clickable_replacement = f'const clickableProjects = {clickable_js};' content = re.sub(clickable_pattern, clickable_replacement, content) # 写入文件 with open('src/pages/ProjectLibraryPage/index.jsx', 'w', encoding='utf-8') as f: f.write(content) print("✅ 已更新ProjectLibraryPage.jsx文件") print(f"✅ 替换了 {len(my_projects_data)} 个化工单元的我的项目数据") if clickable_project: print("✅ 添加了1个可点击查看的化工项目详情") return my_projects_data def show_summary(): """显示项目数据摘要""" my_projects_data, _ = create_updated_project_library() print("\n化工产业我的项目库数据摘要:") print("=" * 80) total_projects = 0 for i, unit in enumerate(my_projects_data, 1): unit_name = unit['unitName'] projects = unit['projects'] project_count = len(projects) total_projects += project_count print(f"\n{i}. {unit_name} ({project_count}个项目)") for j, project in enumerate(projects, 1): print(f" {j}. {project}") print(f"\n总计: {len(my_projects_data)} 个单元,{total_projects} 个项目") if __name__ == "__main__": print("正在更新我的项目库为化工产业数据...") # 先显示摘要 show_summary() print("\n" + "=" * 80) # 执行更新 update_project_library_file()