#!/usr/bin/env python # -*- coding: utf-8 -*- """ 更新mockData.js中的学生画像数据部分 """ import json import re # 读取生成的画像数据 with open('分析报告/generated_portrait_data.json', 'r', encoding='utf-8') as f: portrait = json.load(f) # 读取原mockData.js with open('src/utils/mockData.js', 'r', encoding='utf-8') as f: original_content = f.read() def generate_portrait_js(): """生成画像数据的JavaScript代码""" lines = [] # 能力雷达图数据 lines.append(" // 6维度能力雷达图数据") lines.append(" abilityRadar: {") lines.append(" dimensions: ['数据采集', '数据清洗', '数据分析', '结果解读', '工具实操'],") lines.append(" students: {") for idx, data in sorted(portrait['abilityRadar'].items(), key=lambda x: int(x[0])): lines.append(f" {idx}: {{") lines.append(f" name: '{data['name']}',") lines.append(f" studentId: '{data['studentId']}',") lines.append(f" scores: {data['scores']},") lines.append(f" average: {data['average']},") lines.append(f" rank: {data['rank']},") lines.append(f" totalStudents: {data['totalStudents']}") lines.append(" },") lines.append(" }") lines.append(" },\n") # 成绩分布柱状图数据 lines.append(" // 成绩分布柱状图数据") lines.append(" gradeDistribution: {") for idx, data in sorted(portrait['gradeDistribution'].items(), key=lambda x: int(x[0])): lines.append(f" {idx}: {{") lines.append(f" subjects: {json.dumps(data['subjects'], ensure_ascii=False)},") lines.append(f" scores: {data['scores']}") lines.append(" },") lines.append(" },\n") # 保留其他部分不变,添加占位符注释 lines.append(" // 成长轨迹数据 - 暂时保持现有数据") lines.append(" growthTrack: {") lines.append(" // 由于Word文档不包含时间线数据,暂时保持现有结构") lines.append(" },\n") lines.append(" // 综合评价报告 - 暂时保持现有数据") lines.append(" comprehensiveReport: {") lines.append(" // 由于Word文档不包含文本评价内容,暂时保持现有结构") lines.append(" }") return '\n'.join(lines) # 查找并替换画像数据部分 # 从 "export const mockPortraitData" 到 "export const mockReportData" 之间的内容 pattern = r'(export const mockPortraitData = \{)\n(.*?)(\n\}\n\n// 报告监测数据\nexport const mockReportData = \{)' new_portrait = generate_portrait_js() replacement = r'\1\n' + new_portrait + r'\3' new_content = re.sub(pattern, replacement, original_content, flags=re.DOTALL) # 写回文件 with open('src/utils/mockData.js', 'w', encoding='utf-8') as f: f.write(new_content) print('✅ mockData.js 画像数据已更新!') print(f' - 能力维度更新为5个真实维度') print(f' - 学生数据: {len(portrait["abilityRadar"])}名学生') print(f' - 成绩分布: 6门真实课程')