Files
ALL-teach_sys/frontend_大健康/fix_structure_final.py

115 lines
4.8 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import re
import json
print("修复Mock文件结构...")
# 读取文件
with open('/Users/apple/Documents/cursor/教务系统/frontend_大健康/src/mocks/resumeInterviewMock.js', 'r', encoding='utf-8') as f:
content = f.read()
# 先备份
with open('/Users/apple/Documents/cursor/教务系统/frontend_大健康/src/mocks/resumeInterviewMock.js.backup_before_structure_fix', 'w', encoding='utf-8') as f:
f.write(content)
# 找到所有岗位群
industry_pattern = r'"id":\s*"(health_\d+)"'
industries = re.findall(industry_pattern, content)
unique_industries = []
seen = set()
for ind in industries:
if ind not in seen:
unique_industries.append(ind)
seen.add(ind)
print(f"找到 {len(unique_industries)} 个岗位群")
# 对每个岗位群确保questions在positions之后
for industry_id in unique_industries:
# 查找该岗位群的整个块
pattern = rf'(\{{\s*"id":\s*"{industry_id}"[^{{]*?"name":\s*"[^"]+",\s*"positions":\s*\[)'
match = re.search(pattern, content, re.DOTALL)
if match:
start_pos = match.start()
# 找到这个岗位群块的结束位置下一个岗位群开始或industries数组结束
next_industry = None
for next_id in unique_industries:
if next_id != industry_id:
next_match = re.search(rf'\{{\s*"id":\s*"{next_id}"', content[start_pos + 100:])
if next_match:
if next_industry is None or next_match.start() < next_industry:
next_industry = start_pos + 100 + next_match.start()
# 如果没有下一个岗位群找industries数组的结束
if next_industry is None:
end_match = re.search(r'\n\];', content[start_pos:])
if end_match:
next_industry = start_pos + end_match.start()
if next_industry:
industry_block = content[start_pos:next_industry]
# 检查是否有questions被错误地放在positions内部
if '"questions":' in industry_block:
# 提取positions数组
positions_match = re.search(r'"positions":\s*\[(.*)', industry_block, re.DOTALL)
if positions_match:
positions_content = positions_match.group(1)
# 找到positions数组的正确结束位置不包含questions
bracket_count = 1
brace_count = 0
in_questions = False
positions_end = 0
for i, char in enumerate(positions_content):
if char == '[':
bracket_count += 1
elif char == ']':
bracket_count -= 1
if bracket_count == 0 and not in_questions:
positions_end = i
break
elif char == '{':
brace_count += 1
elif char == '}':
brace_count -= 1
# 检查是否进入questions部分
if '"questions":' in positions_content[max(0, i-20):i+20]:
in_questions = True
# 现在提取questions部分
questions_match = re.search(r'"questions":\s*\[(.*?)\]\s*\}', industry_block, re.DOTALL)
if questions_match:
questions_content = questions_match.group(0)
# 重构岗位群块
# 1. 移除positions中错误的questions
clean_positions = re.sub(r',\s*"questions":\s*\[[^\]]*?\]', '', industry_block)
# 2. 在positions数组后添加questions
# 找到positions的结束位置
pos_end_match = re.search(r'(\]\s*)(,?\s*"questions":|\}\s*(?:,|\]|$))', clean_positions)
if pos_end_match:
# 在positions后插入questions
insert_pos = pos_end_match.start() + len(pos_end_match.group(1))
new_block = clean_positions[:insert_pos] + ',\n ' + questions_content + clean_positions[insert_pos:]
# 替换原内容
content = content[:start_pos] + new_block + content[next_industry:]
print(f" ✓ 修复了 {industry_id} 的结构")
# 清理多余的逗号和括号
content = re.sub(r',\s*\]', ']', content)
content = re.sub(r',\s*\}', '}', content)
# 写回文件
with open('/Users/apple/Documents/cursor/教务系统/frontend_大健康/src/mocks/resumeInterviewMock.js', 'w', encoding='utf-8') as f:
f.write(content)
print("✓ 结构修复完成!")