#!/usr/bin/env python3 # -*- coding: utf-8 -*- import json import re from datetime import datetime def load_visual_design_data(): """加载视觉设计岗位简历数据""" with open('网页未导入数据/视觉设计产业/视觉设计岗位简历.json', 'r', encoding='utf-8') as f: return json.load(f) def extract_questions_with_structure(content, industry_name): """从面试题内容中提取问题和答案(保持subQuestions结构)""" questions = [] # 提取所有问题 pattern = r'(\d+)\.\s*问题[::]?\s*(.*?)(?:\n\s*)?(?:参考回答[::]?)(.*?)(?=\d+\.\s*问题|$)' matches = re.findall(pattern, content, re.DOTALL) # 创建子问题数组 sub_questions = [] for i, match in enumerate(matches[:10], 1): # 限制为前10个问题 q_num = match[0] question_text = match[1].strip() answer_text = match[2].strip() sub_questions.append({ "id": f"q1_{i}", "question": question_text, "answer": answer_text }) # 如果找到了问题,创建带有subQuestions的结构 if sub_questions: questions.append({ "id": "group_q1", "question": f"# {industry_name}面试题", "subQuestions": sub_questions }) return questions def read_mock_file(): """读取并解析mock文件""" with open('src/mocks/resumeInterviewMock.js', 'r', encoding='utf-8') as f: content = f.read() return content def update_industry_questions(mock_content, industry_name, questions): """更新指定岗位群的面试题""" # 构建questions数组的JSON字符串 questions_str = json.dumps(questions, ensure_ascii=False, indent=6) # 调整缩进(每行前面加4个空格) lines = questions_str.split('\n') adjusted_lines = [] for line in lines: if line.strip(): adjusted_lines.append(' ' + line) else: adjusted_lines.append(line) questions_str = '\n'.join(adjusted_lines) # 查找并替换 # 模式:找到industry name,然后找到其questions数组 pattern = rf'("name":\s*"{re.escape(industry_name)}".*?"questions":\s*\[)[^]]*?(\])' def replace_func(match): prefix = match.group(1) suffix = match.group(2) return prefix + '\n' + questions_str.strip() + '\n ' + suffix new_content = re.sub(pattern, replace_func, mock_content, count=1, flags=re.DOTALL) return new_content != mock_content, new_content def main(): """主函数""" print("=== 更新面试题数据(保持结构) ===\n") # 创建备份 timestamp = datetime.now().strftime('%Y%m%d_%H%M%S') backup_name = f'src/mocks/resumeInterviewMock.js.backup_{timestamp}_structured' mock_content = read_mock_file() with open(backup_name, 'w', encoding='utf-8') as f: f.write(mock_content) print(f"✓ 已创建备份: {backup_name}\n") # 加载视觉设计数据 visual_data = load_visual_design_data() # 岗位群映射 industry_map = { "UI设计": ["UI设计师"], "包装设计": ["包装设计师", "包装设计师助理"], "插画设计": ["插画师"], "灯光": ["影视灯光", "摄影美术指导助理"], "动画设计": ["动画师"], "平面设计": ["平面设计师"], "品牌设计": ["品牌视觉内容策划"], "三维设计": ["CG总监助理", "3D建模师"], "后期特效": ["特效设计师", "特效合成师"], "剪辑": ["剪辑师", "剪辑助理"], "调色": ["调色师"], "音频处理": ["录音师", "音效设计师"], "直播": ["直播专员", "直播助理"], "新媒体运营": ["新媒体运营专员"], "影视节目策划": ["文案策划"], "室内设计": ["室内设计师"], "摄影/摄像": ["摄影师", "影视摄像"] } updated_count = 0 for industry_name, position_names in industry_map.items(): # 查找面试题内容 questions = None used_position = None for position_name in position_names: for item in visual_data: if item.get('岗位名称') == position_name and item.get('面试题内容'): questions = extract_questions_with_structure( item.get('面试题内容', ''), industry_name ) used_position = position_name break if questions: break if not questions: print(f"⚠️ 未找到面试题:{industry_name}") continue # 更新mock文件 success, mock_content = update_industry_questions(mock_content, industry_name, questions) if success: updated_count += 1 sub_count = len(questions[0]['subQuestions']) if questions else 0 print(f"✓ 已更新岗位群:{industry_name} (使用岗位:{used_position},共{sub_count}个问题)") else: print(f"✗ 未能更新岗位群:{industry_name}") # 保存文件 with open('src/mocks/resumeInterviewMock.js', 'w', encoding='utf-8') as f: f.write(mock_content) print(f"\n✅ 更新完成!共更新{updated_count}个岗位群") # 验证语法 import subprocess try: result = subprocess.run(['node', '-c', 'src/mocks/resumeInterviewMock.js'], capture_output=True, text=True) if result.returncode == 0: print("✅ 文件语法验证通过") else: print(f"❌ 文件语法验证失败:\n{result.stderr}") print(f"\n恢复备份: {backup_name}") with open(backup_name, 'r', encoding='utf-8') as f: backup_content = f.read() with open('src/mocks/resumeInterviewMock.js', 'w', encoding='utf-8') as f: f.write(backup_content) print("已恢复备份") except Exception as e: print(f"⚠️ 无法验证语法: {str(e)}") if __name__ == '__main__': main()