164 lines
6.3 KiB
Python
164 lines
6.3 KiB
Python
|
|
#!/usr/bin/env python3
|
|||
|
|
import json
|
|||
|
|
import os
|
|||
|
|
from datetime import datetime
|
|||
|
|
|
|||
|
|
# 读取视觉设计岗位简历.json文件
|
|||
|
|
json_file = '网页未导入数据/视觉设计产业/视觉设计岗位简历.json'
|
|||
|
|
mock_file = 'src/mocks/resumeInterviewMock.js'
|
|||
|
|
|
|||
|
|
print("正在读取所有岗位的面试题和答案...")
|
|||
|
|
with open(json_file, 'r', encoding='utf-8') as f:
|
|||
|
|
positions_data = json.load(f)
|
|||
|
|
|
|||
|
|
# 提取UI设计师的面试题和答案
|
|||
|
|
ui_qa_list = []
|
|||
|
|
for position in positions_data:
|
|||
|
|
if position.get("岗位名称") == "UI设计师":
|
|||
|
|
interview_content = position.get("面试题内容", "")
|
|||
|
|
lines = interview_content.split('\n')
|
|||
|
|
current_question = None
|
|||
|
|
current_answer = ''
|
|||
|
|
collecting_answer = False
|
|||
|
|
|
|||
|
|
for line in lines:
|
|||
|
|
line_stripped = line.strip()
|
|||
|
|
|
|||
|
|
# 检测问题行
|
|||
|
|
if line_stripped and line_stripped[0].isdigit() and '. 问题' in line_stripped:
|
|||
|
|
# 保存上一个问题
|
|||
|
|
if current_question:
|
|||
|
|
# 清理答案格式
|
|||
|
|
answer = current_answer.strip()
|
|||
|
|
# 限制长度并保持可读性
|
|||
|
|
if len(answer) > 400:
|
|||
|
|
# 截取到句号或分号位置
|
|||
|
|
cut_point = 400
|
|||
|
|
for sep in ['。', ';', '. ']:
|
|||
|
|
pos = answer[:400].rfind(sep)
|
|||
|
|
if pos > 200:
|
|||
|
|
cut_point = pos + 1
|
|||
|
|
break
|
|||
|
|
answer = answer[:cut_point] + "..."
|
|||
|
|
|
|||
|
|
ui_qa_list.append({
|
|||
|
|
'question': current_question,
|
|||
|
|
'answer': answer if answer else "请根据您的实际经验和项目情况进行回答。"
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
# 提取新问题
|
|||
|
|
parts = line_stripped.split('问题:', 1)
|
|||
|
|
if len(parts) > 1:
|
|||
|
|
current_question = parts[1].strip()
|
|||
|
|
else:
|
|||
|
|
parts = line_stripped.split('问题:', 1)
|
|||
|
|
if len(parts) > 1:
|
|||
|
|
current_question = parts[1].strip()
|
|||
|
|
else:
|
|||
|
|
current_question = line_stripped
|
|||
|
|
|
|||
|
|
current_answer = ''
|
|||
|
|
collecting_answer = False
|
|||
|
|
|
|||
|
|
# 检测答案开始
|
|||
|
|
elif any(marker in line for marker in ['参考回答:', '参考答案:', '答案:']):
|
|||
|
|
collecting_answer = True
|
|||
|
|
# 提取答案内容
|
|||
|
|
for marker in ['参考回答:', '参考答案:', '答案:']:
|
|||
|
|
if marker in line:
|
|||
|
|
answer_part = line.split(marker, 1)[1].strip()
|
|||
|
|
if answer_part:
|
|||
|
|
current_answer = answer_part
|
|||
|
|
break
|
|||
|
|
|
|||
|
|
# 收集答案内容
|
|||
|
|
elif collecting_answer and line.strip():
|
|||
|
|
# 检查是否是新问题或新章节
|
|||
|
|
if (line_stripped and line_stripped[0].isdigit() and '. 问题' in line_stripped) or line_stripped.startswith('#'):
|
|||
|
|
collecting_answer = False
|
|||
|
|
else:
|
|||
|
|
if current_answer:
|
|||
|
|
current_answer += ' '
|
|||
|
|
current_answer += line.strip()
|
|||
|
|
|
|||
|
|
# 保存最后一个问题
|
|||
|
|
if current_question:
|
|||
|
|
answer = current_answer.strip()
|
|||
|
|
if len(answer) > 400:
|
|||
|
|
cut_point = 400
|
|||
|
|
for sep in ['。', ';', '. ']:
|
|||
|
|
pos = answer[:400].rfind(sep)
|
|||
|
|
if pos > 200:
|
|||
|
|
cut_point = pos + 1
|
|||
|
|
break
|
|||
|
|
answer = answer[:cut_point] + "..."
|
|||
|
|
|
|||
|
|
ui_qa_list.append({
|
|||
|
|
'question': current_question,
|
|||
|
|
'answer': answer if answer else "请根据您的实际经验和项目情况进行回答。"
|
|||
|
|
})
|
|||
|
|
break
|
|||
|
|
|
|||
|
|
print(f"找到UI设计师的 {len(ui_qa_list)} 个面试题")
|
|||
|
|
|
|||
|
|
# 创建备份
|
|||
|
|
backup_file = f"{mock_file}.backup_precise_{datetime.now().strftime('%Y%m%d_%H%M%S')}"
|
|||
|
|
with open(mock_file, 'r', encoding='utf-8') as f:
|
|||
|
|
original_content = f.read()
|
|||
|
|
with open(backup_file, 'w', encoding='utf-8') as f:
|
|||
|
|
f.write(original_content)
|
|||
|
|
print(f"已创建备份:{backup_file}")
|
|||
|
|
|
|||
|
|
# 逐个更新答案
|
|||
|
|
print("\n开始更新UI设计面试题答案...")
|
|||
|
|
content = original_content
|
|||
|
|
updated_count = 0
|
|||
|
|
|
|||
|
|
for i, qa in enumerate(ui_qa_list, 1):
|
|||
|
|
question_escaped = qa['question'].replace('?', r'\?').replace('(', r'\(').replace(')', r'\)')
|
|||
|
|
|
|||
|
|
# 构建查找模式
|
|||
|
|
search_pattern = f'"question": "{qa["question"]}",'
|
|||
|
|
|
|||
|
|
if search_pattern in content:
|
|||
|
|
# 找到问题位置
|
|||
|
|
q_pos = content.find(search_pattern)
|
|||
|
|
if q_pos > 0:
|
|||
|
|
# 找到对应的answer行
|
|||
|
|
# 从问题位置开始,找到下一个"answer":
|
|||
|
|
answer_start = content.find('"answer":', q_pos)
|
|||
|
|
if answer_start > 0 and answer_start < q_pos + 500: # 确保在同一个问题范围内
|
|||
|
|
# 找到答案的引号位置
|
|||
|
|
quote_start = content.find('"', answer_start + 9)
|
|||
|
|
quote_end = content.find('"', quote_start + 1)
|
|||
|
|
|
|||
|
|
if quote_start > 0 and quote_end > 0:
|
|||
|
|
# 替换答案内容
|
|||
|
|
old_answer = content[quote_start+1:quote_end]
|
|||
|
|
new_answer = qa['answer'].replace('"', '\\"').replace('\n', ' ')
|
|||
|
|
|
|||
|
|
content = content[:quote_start+1] + new_answer + content[quote_end:]
|
|||
|
|
updated_count += 1
|
|||
|
|
print(f"✓ 更新问题 {i}: {qa['question'][:50]}...")
|
|||
|
|
|
|||
|
|
# 写入文件
|
|||
|
|
if updated_count > 0:
|
|||
|
|
with open(mock_file, 'w', encoding='utf-8') as f:
|
|||
|
|
f.write(content)
|
|||
|
|
|
|||
|
|
# 验证语法
|
|||
|
|
print(f"\n验证语法...")
|
|||
|
|
result = os.popen(f'node -c {mock_file} 2>&1').read()
|
|||
|
|
if result:
|
|||
|
|
print(f"❌ 语法错误:{result}")
|
|||
|
|
# 恢复备份
|
|||
|
|
with open(backup_file, 'r', encoding='utf-8') as f:
|
|||
|
|
content = f.read()
|
|||
|
|
with open(mock_file, 'w', encoding='utf-8') as f:
|
|||
|
|
f.write(content)
|
|||
|
|
print("已恢复备份")
|
|||
|
|
else:
|
|||
|
|
print("✓ 语法验证通过")
|
|||
|
|
print(f"\n成功更新 {updated_count} 个UI设计面试题答案!")
|
|||
|
|
else:
|
|||
|
|
print("未能更新任何答案")
|