173 lines
7.4 KiB
Python
173 lines
7.4 KiB
Python
|
|
#!/usr/bin/env python3
|
|||
|
|
# -*- coding: utf-8 -*-
|
|||
|
|
"""
|
|||
|
|
为视觉设计岗位添加个人修改版简历数据
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
import json
|
|||
|
|
import os
|
|||
|
|
import re
|
|||
|
|
import shutil
|
|||
|
|
from datetime import datetime
|
|||
|
|
|
|||
|
|
def read_markdown_file(file_path):
|
|||
|
|
"""读取markdown文件内容"""
|
|||
|
|
try:
|
|||
|
|
with open(file_path, 'r', encoding='utf-8') as f:
|
|||
|
|
return f.read()
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f"读取文件失败 {file_path}: {e}")
|
|||
|
|
return None
|
|||
|
|
|
|||
|
|
def add_modified_resume_data():
|
|||
|
|
"""为指定岗位添加修改版简历数据"""
|
|||
|
|
|
|||
|
|
# 修改版简历文件映射
|
|||
|
|
modified_resume_files = {
|
|||
|
|
"UI设计师": "网页未导入数据/视觉设计产业/视觉设计修改版简历/UI设计师.md",
|
|||
|
|
"包装设计师": "网页未导入数据/视觉设计产业/视觉设计修改版简历/包装设计师.md",
|
|||
|
|
"摄影师": "网页未导入数据/视觉设计产业/视觉设计修改版简历/摄影师.md",
|
|||
|
|
"角色原画师": "网页未导入数据/视觉设计产业/视觉设计修改版简历/角色原画师.md",
|
|||
|
|
"影视灯光": "网页未导入数据/视觉设计产业/视觉设计修改版简历/影视灯光.md",
|
|||
|
|
"摄影美术指导助理": "网页未导入数据/视觉设计产业/视觉设计修改版简历/摄影美术指导助理.md",
|
|||
|
|
"品牌视觉内容策划": "网页未导入数据/视觉设计产业/视觉设计修改版简历/品牌视觉内容策划.md",
|
|||
|
|
"影视摄像": "网页未导入数据/视觉设计产业/视觉设计修改版简历/影视摄像.md",
|
|||
|
|
"AI绘画师": "网页未导入数据/视觉设计产业/视觉设计修改版简历/AI绘画师.md",
|
|||
|
|
"CG总监助理": "网页未导入数据/视觉设计产业/视觉设计修改版简历/CG总监助理.md"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
file_path = "src/mocks/resumeInterviewMock.js"
|
|||
|
|
|
|||
|
|
# 创建备份
|
|||
|
|
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|||
|
|
backup_path = f"{file_path}.backup_add_modified_{timestamp}"
|
|||
|
|
shutil.copy2(file_path, backup_path)
|
|||
|
|
print(f"📦 已创建备份: {backup_path}")
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
# 读取JS文件
|
|||
|
|
with open(file_path, 'r', encoding='utf-8') as f:
|
|||
|
|
js_content = f.read()
|
|||
|
|
|
|||
|
|
print(f"📊 开始处理 {len(modified_resume_files)} 个岗位的修改版简历...")
|
|||
|
|
|
|||
|
|
processed_count = 0
|
|||
|
|
|
|||
|
|
# 为每个岗位添加content字段
|
|||
|
|
for position_title, md_file_path in modified_resume_files.items():
|
|||
|
|
print(f"🔍 处理岗位: {position_title}")
|
|||
|
|
|
|||
|
|
# 读取修改版简历内容
|
|||
|
|
modified_content = read_markdown_file(md_file_path)
|
|||
|
|
if not modified_content:
|
|||
|
|
print(f"⚠️ 跳过 {position_title}: 无法读取修改版简历")
|
|||
|
|
continue
|
|||
|
|
|
|||
|
|
# 查找该岗位在JS文件中的位置
|
|||
|
|
position_pattern = rf'"title":\s*"{re.escape(position_title)}"'
|
|||
|
|
position_match = re.search(position_pattern, js_content)
|
|||
|
|
|
|||
|
|
if not position_match:
|
|||
|
|
print(f"⚠️ 跳过 {position_title}: 在JS文件中未找到")
|
|||
|
|
continue
|
|||
|
|
|
|||
|
|
# 找到该岗位对象的结束位置(下一个}之前)
|
|||
|
|
start_pos = position_match.start()
|
|||
|
|
|
|||
|
|
# 向前找到这个岗位对象的开始位置(最近的{)
|
|||
|
|
obj_start = js_content.rfind('{', 0, start_pos)
|
|||
|
|
if obj_start == -1:
|
|||
|
|
print(f"⚠️ 跳过 {position_title}: 无法找到对象开始位置")
|
|||
|
|
continue
|
|||
|
|
|
|||
|
|
# 向后找到这个岗位对象的结束位置
|
|||
|
|
brace_count = 0
|
|||
|
|
obj_end = obj_start
|
|||
|
|
for i in range(obj_start, len(js_content)):
|
|||
|
|
if js_content[i] == '{':
|
|||
|
|
brace_count += 1
|
|||
|
|
elif js_content[i] == '}':
|
|||
|
|
brace_count -= 1
|
|||
|
|
if brace_count == 0:
|
|||
|
|
obj_end = i
|
|||
|
|
break
|
|||
|
|
|
|||
|
|
if obj_end == obj_start:
|
|||
|
|
print(f"⚠️ 跳过 {position_title}: 无法找到对象结束位置")
|
|||
|
|
continue
|
|||
|
|
|
|||
|
|
# 提取原始对象内容
|
|||
|
|
original_obj = js_content[obj_start:obj_end+1]
|
|||
|
|
|
|||
|
|
# 检查是否已经有content字段
|
|||
|
|
if '"content"' in original_obj:
|
|||
|
|
print(f"⚠️ 跳过 {position_title}: 已存在content字段")
|
|||
|
|
continue
|
|||
|
|
|
|||
|
|
# 构造content字段(假设原始版本来自现有简历数据)
|
|||
|
|
# 这里我们需要从岗位简历数据中提取原始版本
|
|||
|
|
original_resume = f"# 对应岗位:{position_title}\\n\\n# 一、项目经历\\n\\n待补充项目经历内容...\\n\\n# 二、专业技能\\n\\n待补充专业技能内容...\\n\\n# 三、个人总结\\n\\n待补充个人总结内容..."
|
|||
|
|
|
|||
|
|
# 转义修改版内容中的引号和换行符
|
|||
|
|
escaped_modified = modified_content.replace('\\', '\\\\').replace('"', '\\"').replace('\n', '\\n')
|
|||
|
|
escaped_original = original_resume.replace('\\', '\\\\').replace('"', '\\"').replace('\n', '\\n')
|
|||
|
|
|
|||
|
|
# 在对象结束前插入content字段
|
|||
|
|
# 找到最后一个字段(通常是requirements)的结束位置
|
|||
|
|
last_field_end = original_obj.rfind(']')
|
|||
|
|
if last_field_end == -1:
|
|||
|
|
last_field_end = original_obj.rfind('"')
|
|||
|
|
|
|||
|
|
if last_field_end == -1:
|
|||
|
|
print(f"⚠️ 跳过 {position_title}: 无法找到插入位置")
|
|||
|
|
continue
|
|||
|
|
|
|||
|
|
# 构造新的对象内容
|
|||
|
|
content_field = f''',
|
|||
|
|
"content": {{
|
|||
|
|
"original": "{escaped_original}",
|
|||
|
|
"modified": "{escaped_modified}"
|
|||
|
|
}}'''
|
|||
|
|
|
|||
|
|
# 插入content字段
|
|||
|
|
new_obj = original_obj[:last_field_end+1] + content_field + original_obj[last_field_end+1:-1] + original_obj[-1]
|
|||
|
|
|
|||
|
|
# 替换JS文件中的内容
|
|||
|
|
js_content = js_content[:obj_start] + new_obj + js_content[obj_end+1:]
|
|||
|
|
|
|||
|
|
processed_count += 1
|
|||
|
|
print(f"✅ 已处理 {position_title}")
|
|||
|
|
|
|||
|
|
# 写入更新后的JS文件
|
|||
|
|
with open(file_path, 'w', encoding='utf-8') as f:
|
|||
|
|
f.write(js_content)
|
|||
|
|
|
|||
|
|
print(f"📊 处理完成:")
|
|||
|
|
print(f" - 总岗位数: {len(modified_resume_files)}")
|
|||
|
|
print(f" - 成功处理: {processed_count}")
|
|||
|
|
print(f"✅ 已更新 {file_path}")
|
|||
|
|
|
|||
|
|
# 验证JS语法
|
|||
|
|
import subprocess
|
|||
|
|
try:
|
|||
|
|
result = subprocess.run(['node', '-c', file_path], capture_output=True, text=True)
|
|||
|
|
if result.returncode == 0:
|
|||
|
|
print("✅ JavaScript语法验证通过")
|
|||
|
|
else:
|
|||
|
|
print(f"❌ JavaScript语法验证失败: {result.stderr}")
|
|||
|
|
# 恢复备份
|
|||
|
|
shutil.copy2(backup_path, file_path)
|
|||
|
|
print("🔄 已恢复原始文件")
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f"⚠️ 无法验证JavaScript语法: {e}")
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f"❌ 处理失败: {e}")
|
|||
|
|
# 恢复备份
|
|||
|
|
shutil.copy2(backup_path, file_path)
|
|||
|
|
print("🔄 已恢复原始文件")
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
print("🚀 开始为视觉设计岗位添加修改版简历数据...")
|
|||
|
|
add_modified_resume_data()
|
|||
|
|
print("🎉 处理完成!")
|