223 lines
8.1 KiB
Python
223 lines
8.1 KiB
Python
|
|
#!/usr/bin/env python3
|
|||
|
|
import json
|
|||
|
|
import re
|
|||
|
|
|
|||
|
|
# 读取化工岗位简历数据
|
|||
|
|
with open('网页未导入数据/化工产业/化工岗位简历.json', 'r', encoding='utf-8') as f:
|
|||
|
|
chemical_data = json.load(f)
|
|||
|
|
|
|||
|
|
# 收集所有岗位群的面试题
|
|||
|
|
job_group_all_questions = {}
|
|||
|
|
total_questions = 0
|
|||
|
|
|
|||
|
|
# 遍历所有岗位
|
|||
|
|
for position in chemical_data:
|
|||
|
|
job_group = position.get('简历岗位群', '')
|
|||
|
|
interview_content = position.get('面试题内容', '')
|
|||
|
|
|
|||
|
|
if not job_group or not interview_content:
|
|||
|
|
continue
|
|||
|
|
|
|||
|
|
# 初始化岗位群
|
|||
|
|
if job_group not in job_group_all_questions:
|
|||
|
|
job_group_all_questions[job_group] = []
|
|||
|
|
|
|||
|
|
# 解析面试题内容 - 分别处理模拟问答题和选择题
|
|||
|
|
sections = interview_content.split('#')
|
|||
|
|
|
|||
|
|
for section in sections:
|
|||
|
|
if not section.strip():
|
|||
|
|
continue
|
|||
|
|
|
|||
|
|
section_lines = section.strip().split('\n')
|
|||
|
|
section_title = section_lines[0] if section_lines else ''
|
|||
|
|
|
|||
|
|
if '模拟问答题' in section_title or '问答题' in section_title:
|
|||
|
|
# 处理问答题
|
|||
|
|
current_q = None
|
|||
|
|
current_a = []
|
|||
|
|
|
|||
|
|
for line in section_lines[1:]:
|
|||
|
|
line = line.strip()
|
|||
|
|
|
|||
|
|
# 检查是否是新问题(以数字开头)
|
|||
|
|
if re.match(r'^\d+\.', line):
|
|||
|
|
# 保存之前的问答对
|
|||
|
|
if current_q and current_a:
|
|||
|
|
answer_text = '\n'.join(current_a)
|
|||
|
|
job_group_all_questions[job_group].append({
|
|||
|
|
'question': current_q,
|
|||
|
|
'answer': answer_text
|
|||
|
|
})
|
|||
|
|
total_questions += 1
|
|||
|
|
|
|||
|
|
current_q = line
|
|||
|
|
current_a = []
|
|||
|
|
elif '示例答案' in line or '答案:' in line:
|
|||
|
|
# 开始收集答案
|
|||
|
|
continue
|
|||
|
|
elif current_q and (line.startswith('-') or line.startswith('•') or line):
|
|||
|
|
# 收集答案内容
|
|||
|
|
if line and not line.startswith('![]'): # 排除图片链接
|
|||
|
|
current_a.append(line)
|
|||
|
|
|
|||
|
|
# 保存最后一个问答对
|
|||
|
|
if current_q and current_a:
|
|||
|
|
answer_text = '\n'.join(current_a)
|
|||
|
|
job_group_all_questions[job_group].append({
|
|||
|
|
'question': current_q,
|
|||
|
|
'answer': answer_text
|
|||
|
|
})
|
|||
|
|
total_questions += 1
|
|||
|
|
|
|||
|
|
elif '选择题' in section_title:
|
|||
|
|
# 处理选择题
|
|||
|
|
current_q = None
|
|||
|
|
options = []
|
|||
|
|
current_answer = None
|
|||
|
|
|
|||
|
|
for line in section_lines[1:]:
|
|||
|
|
line = line.strip()
|
|||
|
|
|
|||
|
|
# 检查是否是新问题(以数字开头)
|
|||
|
|
if re.match(r'^\d+\.', line):
|
|||
|
|
# 保存之前的选择题
|
|||
|
|
if current_q and options and current_answer:
|
|||
|
|
full_question = current_q + '\n' + '\n'.join(options)
|
|||
|
|
job_group_all_questions[job_group].append({
|
|||
|
|
'question': full_question,
|
|||
|
|
'answer': current_answer
|
|||
|
|
})
|
|||
|
|
total_questions += 1
|
|||
|
|
|
|||
|
|
current_q = line
|
|||
|
|
options = []
|
|||
|
|
current_answer = None
|
|||
|
|
elif re.match(r'^[A-D]\.', line):
|
|||
|
|
# 收集选项
|
|||
|
|
options.append(line)
|
|||
|
|
elif '正确答案' in line or '正确选项' in line or '答案:' in line:
|
|||
|
|
# 提取答案
|
|||
|
|
current_answer = line
|
|||
|
|
|
|||
|
|
# 保存最后一个选择题
|
|||
|
|
if current_q and options and current_answer:
|
|||
|
|
full_question = current_q + '\n' + '\n'.join(options)
|
|||
|
|
job_group_all_questions[job_group].append({
|
|||
|
|
'question': full_question,
|
|||
|
|
'answer': current_answer
|
|||
|
|
})
|
|||
|
|
total_questions += 1
|
|||
|
|
|
|||
|
|
# 输出统计信息
|
|||
|
|
print(f"\n===== 化工岗位完整面试题统计 =====")
|
|||
|
|
print(f"总岗位群数: {len(job_group_all_questions)}")
|
|||
|
|
print(f"总面试题数: {total_questions}")
|
|||
|
|
print(f"\n各岗位群面试题数量:")
|
|||
|
|
|
|||
|
|
for job_group, questions in sorted(job_group_all_questions.items()):
|
|||
|
|
print(f" {job_group}: {len(questions)} 题")
|
|||
|
|
|
|||
|
|
# 显示部分题目示例
|
|||
|
|
print(f"\n===== 面试题示例 =====")
|
|||
|
|
for job_group in list(job_group_all_questions.keys())[:2]:
|
|||
|
|
questions = job_group_all_questions[job_group]
|
|||
|
|
if questions:
|
|||
|
|
print(f"\n【{job_group}】共{len(questions)}题,前2题示例:")
|
|||
|
|
for i, q in enumerate(questions[:2], 1):
|
|||
|
|
print(f" 题{i}:")
|
|||
|
|
print(f" 问题: {q['question'][:60]}...")
|
|||
|
|
print(f" 答案: {q['answer'][:60]}...")
|
|||
|
|
|
|||
|
|
# 保存面试题数据
|
|||
|
|
with open('all_questions_complete.json', 'w', encoding='utf-8') as f:
|
|||
|
|
json.dump(job_group_all_questions, f, ensure_ascii=False, indent=2)
|
|||
|
|
|
|||
|
|
print(f"\n✅ 已保存所有面试题到 all_questions_complete.json")
|
|||
|
|
|
|||
|
|
# 生成最终的更新脚本
|
|||
|
|
print(f"\n正在生成最终更新脚本...")
|
|||
|
|
|
|||
|
|
with open('update_all_questions_final.py', 'w', encoding='utf-8') as f:
|
|||
|
|
f.write('''#!/usr/bin/env python3
|
|||
|
|
import json
|
|||
|
|
import re
|
|||
|
|
import subprocess
|
|||
|
|
from datetime import datetime
|
|||
|
|
|
|||
|
|
# 读取完整的面试题数据
|
|||
|
|
with open('all_questions_complete.json', 'r', encoding='utf-8') as f:
|
|||
|
|
job_group_questions = json.load(f)
|
|||
|
|
|
|||
|
|
# 读取现有mock文件
|
|||
|
|
with open('src/mocks/resumeInterviewMock.js', 'r', encoding='utf-8') as f:
|
|||
|
|
content = f.read()
|
|||
|
|
|
|||
|
|
# 备份文件
|
|||
|
|
timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
|
|||
|
|
backup_file = f'src/mocks/resumeInterviewMock.js.backup_final_{timestamp}'
|
|||
|
|
with open(backup_file, 'w', encoding='utf-8') as f:
|
|||
|
|
f.write(content)
|
|||
|
|
print(f"已创建备份: {backup_file}")
|
|||
|
|
|
|||
|
|
# 更新每个岗位群的面试题
|
|||
|
|
updated_count = 0
|
|||
|
|
for job_group, questions in job_group_questions.items():
|
|||
|
|
if not questions:
|
|||
|
|
continue
|
|||
|
|
|
|||
|
|
# 构建subQuestions数组内容
|
|||
|
|
sub_questions_items = []
|
|||
|
|
for i, q in enumerate(questions):
|
|||
|
|
# 对问题和答案进行JSON转义
|
|||
|
|
escaped_q = json.dumps(q['question'], ensure_ascii=False)
|
|||
|
|
escaped_a = json.dumps(q['answer'], ensure_ascii=False)
|
|||
|
|
|
|||
|
|
question_str = '{'
|
|||
|
|
question_str += f'"id": "q{i+1}", '
|
|||
|
|
question_str += f'"question": {escaped_q}, '
|
|||
|
|
question_str += f'"answer": {escaped_a}'
|
|||
|
|
question_str += '}'
|
|||
|
|
sub_questions_items.append(question_str)
|
|||
|
|
|
|||
|
|
# 创建完整的subQuestions内容
|
|||
|
|
sub_questions_content = ',\\n'.join(sub_questions_items)
|
|||
|
|
|
|||
|
|
# 查找并替换对应岗位群的subQuestions
|
|||
|
|
pattern = rf'("question"\\s*:\\s*"{re.escape(job_group)}"[^}}]*?"subQuestions"\\s*:\\s*)\\[[^\\]]*\\]'
|
|||
|
|
replacement = rf'\\1[\\n{sub_questions_content}\\n ]'
|
|||
|
|
|
|||
|
|
new_content = re.sub(pattern, replacement, content, flags=re.DOTALL)
|
|||
|
|
|
|||
|
|
if new_content != content:
|
|||
|
|
content = new_content
|
|||
|
|
updated_count += 1
|
|||
|
|
print(f"✓ 已更新 {job_group} 的 {len(questions)} 道面试题")
|
|||
|
|
|
|||
|
|
# 保存更新后的文件
|
|||
|
|
with open('src/mocks/resumeInterviewMock.js', 'w', encoding='utf-8') as f:
|
|||
|
|
f.write(content)
|
|||
|
|
|
|||
|
|
# 验证语法
|
|||
|
|
try:
|
|||
|
|
result = subprocess.run(['node', '-c', 'src/mocks/resumeInterviewMock.js'],
|
|||
|
|
capture_output=True, text=True, encoding='utf-8')
|
|||
|
|
if result.returncode == 0:
|
|||
|
|
print(f"\\n✓ 语法检查通过")
|
|||
|
|
print(f"✓ 成功更新了 {updated_count} 个岗位群的面试题")
|
|||
|
|
print(f"\\n✅ 所有面试题更新成功完成!")
|
|||
|
|
else:
|
|||
|
|
print(f"\\n✗ 语法检查失败: {result.stderr}")
|
|||
|
|
# 恢复备份
|
|||
|
|
with open(backup_file, 'r', encoding='utf-8') as f:
|
|||
|
|
content = f.read()
|
|||
|
|
with open('src/mocks/resumeInterviewMock.js', 'w', encoding='utf-8') as f:
|
|||
|
|
f.write(content)
|
|||
|
|
print(f"已从备份恢复")
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f"错误: {e}")
|
|||
|
|
''')
|
|||
|
|
|
|||
|
|
print(f"✅ 已生成 update_all_questions_final.py")
|
|||
|
|
print(f"\n请运行以下命令来更新所有面试题:")
|
|||
|
|
print(f"python3 update_all_questions_final.py")
|