Files
ALL-teach_sys/frontend_视觉设计/update_each_industry.py
KQL cd2e307402 初始化12个产业教务系统项目
主要内容:
- 包含12个产业的完整教务系统前端代码
- 智能启动脚本 (start-industry.sh)
- 可视化产业导航页面 (index.html)
- 项目文档 (README.md)

优化内容:
- 删除所有node_modules和.yoyo文件夹,从7.5GB减少到2.7GB
- 添加.gitignore文件避免上传不必要的文件
- 自动依赖管理和智能启动系统

产业列表:
1. 文旅产业 (5150)
2. 智能制造 (5151)
3. 智能开发 (5152)
4. 财经商贸 (5153)
5. 视觉设计 (5154)
6. 交通物流 (5155)
7. 大健康 (5156)
8. 土木水利 (5157)
9. 食品产业 (5158)
10. 化工产业 (5159)
11. 能源产业 (5160)
12. 环保产业 (5161)

🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-24 14:14:14 +08:00

255 lines
9.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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)
def extract_questions_from_position(position_name):
"""从指定岗位提取面试题"""
for position in positions_data:
if position.get("岗位名称") == position_name:
interview_content = position.get("面试题内容", "")
if not interview_content:
return []
questions = []
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 or '' in line_stripped):
# 保存上一个问题
if current_question:
answer = current_answer.strip()
if len(answer) > 500:
# 找到合适的截断点
cut_point = 500
for sep in ['', '', '. ', '']:
pos = answer[:500].rfind(sep)
if pos > 300:
cut_point = pos + 1
break
answer = answer[:cut_point]
questions.append({
'question': current_question,
'answer': answer if answer else "请根据您的实际经验和项目情况进行回答。"
})
# 提取新问题
current_question = None
if '问题:' in line_stripped:
parts = line_stripped.split('问题:', 1)
current_question = parts[1].strip() if len(parts) > 1 else None
elif '问题:' in line_stripped:
parts = line_stripped.split('问题:', 1)
current_question = parts[1].strip() if len(parts) > 1 else None
elif '. ' in line_stripped:
parts = line_stripped.split('. ', 1)
current_question = parts[1].strip() if len(parts) > 1 else None
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.startswith('#') or (line_stripped and line_stripped[0].isdigit() and '问题' in line_stripped):
collecting_answer = False
else:
if current_answer:
current_answer += ' '
current_answer += line.strip()
# 保存最后一个问题
if current_question:
answer = current_answer.strip()
if len(answer) > 500:
cut_point = 500
for sep in ['', '', '. ', '']:
pos = answer[:500].rfind(sep)
if pos > 300:
cut_point = pos + 1
break
answer = answer[:cut_point]
questions.append({
'question': current_question,
'answer': answer if answer else "请根据您的实际经验和项目情况进行回答。"
})
# 限制为最多16个问题
return questions[:16]
return []
def update_industry_questions(industry_name, position_name, q_prefix, group_id):
"""更新指定产业的面试题"""
print(f"\n处理 {industry_name}...")
# 提取面试题
questions = extract_questions_from_position(position_name)
if not questions:
print(f" ✗ 未找到 {position_name} 的面试题")
return False
print(f" 找到 {len(questions)} 个面试题")
# 读取文件
with open(mock_file, 'r', encoding='utf-8') as f:
content = f.read()
# 构建新的subQuestions
sub_questions = []
for i, qa in enumerate(questions, 1):
sub_questions.append({
"id": f"{q_prefix}_{i}",
"question": qa['question'].replace('"', '\\"').replace('\n', ' '),
"answer": qa['answer'].replace('"', '\\"').replace('\n', ' ')
})
# 构建新的questions对象
new_questions = {
"id": group_id,
"question": f"# {industry_name}面试题",
"subQuestions": sub_questions
}
# 生成JSON字符串
questions_json = json.dumps([new_questions], ensure_ascii=False, indent=6)
# 查找并替换
# 先找到产业名称的位置
industry_pos = content.find(f'"name": "{industry_name}"')
if industry_pos == -1:
print(f" ✗ 未找到产业 {industry_name}")
return False
# 找到这个产业的questions字段
questions_start = content.find('"questions":', industry_pos)
if questions_start == -1 or questions_start > industry_pos + 2000: # 限制搜索范围
print(f" ✗ 未找到 {industry_name} 的questions字段")
return False
# 找到questions数组的开始和结束
array_start = content.find('[', questions_start)
if array_start == -1:
print(f" ✗ 未找到questions数组开始")
return False
# 找到对应的结束括号
bracket_count = 1
pos = array_start + 1
while bracket_count > 0 and pos < len(content):
if content[pos] == '[':
bracket_count += 1
elif content[pos] == ']':
bracket_count -= 1
pos += 1
if bracket_count != 0:
print(f" ✗ 未能正确解析questions数组")
return False
# 替换内容
# 调整缩进
lines = questions_json.split('\n')
formatted_lines = []
for line in lines:
if line.strip():
formatted_lines.append(' ' + line)
else:
formatted_lines.append('')
questions_json = '\n'.join(formatted_lines).strip()
new_content = content[:array_start] + questions_json + content[pos-1:]
# 写入文件
with open(mock_file, 'w', encoding='utf-8') as f:
f.write(new_content)
# 验证语法
result = os.popen(f'node -c {mock_file} 2>&1').read()
if result:
print(f" ❌ 语法错误,回滚")
with open(mock_file, 'w', encoding='utf-8') as f:
f.write(content)
return False
print(f" ✓ 成功更新 {industry_name}")
return True
# 创建备份
backup_file = f"{mock_file}.backup_each_{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}")
# 要更新的产业列表
industries_to_update = [
("包装设计", "包装设计师", "q2", "group_q2"),
("插画设计", "插画师", "q3", "group_q3"),
("灯光", "影视灯光", "q4", "group_q4"),
("动画设计", "角色原画师", "q5", "group_q5"),
("后期特效", "特效设计师", "q6", "group_q6"),
("剪辑", "剪辑师", "q7", "group_q7"),
("品牌设计", "品牌视觉内容策划", "q8", "group_q8"),
("平面设计", "平面设计师", "q9", "group_q9"),
("三维设计", "3D建模师", "q10", "group_q10"),
("摄影/摄像", "影视摄像", "q11", "group_q11"),
("室内设计", "室内设计师", "q12", "group_q12"),
("调色", "调色师", "q13", "group_q13"),
("新媒体运营", "自媒体运营专员", "q14", "group_q14"),
("音频处理", "音效设计师", "q15", "group_q15"),
("影视节目策划", "导演", "q16", "group_q16"),
("直播", "直播运营", "q17", "group_q17")
]
# 逐个更新
success_count = 0
failed_list = []
for industry_name, position_name, q_prefix, group_id in industries_to_update:
if update_industry_questions(industry_name, position_name, q_prefix, group_id):
success_count += 1
else:
failed_list.append(industry_name)
# 输出结果
print("\n" + "="*50)
print(f"更新完成!成功:{success_count} 个,失败:{len(failed_list)}")
if failed_list:
print(f"失败的产业:{', '.join(failed_list)}")
# 最终验证
print("\n最终语法验证...")
result = os.popen(f'node -c {mock_file} 2>&1').read()
if result:
print(f"❌ 文件有语法错误")
print(result[:500])
else:
print("✓ 所有语法验证通过")
print("所有视觉设计产业的面试题更新完成!")