import argparse import re def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser(description="提取UP分组信息") parser.add_argument( "--input", default="./source/19_53_no_titles.md", help="输入报告路径", ) parser.add_argument( "--output", help="输出报告路径(默认覆盖输入)", ) return parser.parse_args() def main(): args = parse_args() input_file = args.input output_file = args.output or input_file with open(input_file, 'r', encoding='utf-8') as f: content = f.read() lines = content.split('\n') section_starts = [] for i, line in enumerate(lines): if line.startswith('## '): section_starts.append(i) if len(section_starts) < 2: print('No sections found') return 1 header = '\n'.join(lines[:section_starts[0]]) sections = [] for idx in range(len(section_starts)): start = section_starts[idx] end = section_starts[idx + 1] if idx + 1 < len(section_starts) else len(lines) section = '\n'.join(lines[start:end]) sections.append(section) sections = sections[1:] parsed = [] for sec in sections: match = re.match(r'^## (\d+)\. (.+) \(mid: (\d+)\)', sec) if match: num = int(match.group(1)) name = match.group(2) mid = match.group(3) group_m = re.search(r'- 预设分组: (.+)', sec) action_m = re.search(r'- 建议动作: (.+)', sec) reason_m = re.search(r'- 判断依据: (.+)', sec) error_m = re.search(r'AI返回未知group: (.+)', sec) group = group_m.group(1).strip() if group_m else "" action = action_m.group(1).strip() if action_m else "" reason = reason_m.group(1).strip() if reason_m else "" error = error_m.group(1).strip() if error_m else "" parsed.append({ 'num': num, 'name': name, 'mid': mid, 'group': group, 'action': action, 'reason': reason, 'error': error }) parsed.sort(key=lambda x: (x['name'].casefold(), int(x['mid']))) lines_out = [header, ""] for p in parsed: lines_out.append(f"## {p['num']}. {p['name']} (mid: {p['mid']})") lines_out.append("") if p['group']: lines_out.append(f"- 预设分组: {p['group']}") if p['action']: lines_out.append(f"- 建议动作: {p['action']}") if p['reason']: lines_out.append(f"- 判断依据: {p['reason']}") if p['error']: lines_out.append(f"- 异常: {p['error']}") lines_out.append("") result = '\n'.join(lines_out) result = re.sub(r'\n{3,}', '\n\n', result) with open(output_file, 'w', encoding='utf-8') as f: f.write(result) print(f'Extracted {len(parsed)} sections') return 0 if __name__ == "__main__": raise SystemExit(main())