两套试题融合成一个
两套试题融合成一个
from docx import Document import re def merge_question_docs(file1, file2, output_file): """ 合并两个docx文件的题目,保证每一题一个唯一序号,移除原题所有序号并重新排序 :param file1: 第一套题docx路径 :param file2: 第二套题docx路径 :param output_file: 合并后输出路径 """ # 提取题目(按空行分割,保留段落结构) def extract_questions(doc): questions = [] current = [] for para in doc.paragraphs: text = para.text.rstrip('\n') # 保留行内换行,仅去除段落末尾空行 if text: current.append(text) else: if current: questions.append(current) current = [] if current: questions.append(current) return questions # 提取并合并题目 q1 = extract_questions(Document(file1)) q2 = extract_questions(Document(file2)) all_q = q1 + q2 # 正则:匹配任意开头序号(支持1.、(1)、Q1、一、(一)等格式) pattern = re.compile(r'^\s*(\d+[.)]|\(\d+\)|[一二三四五六七八九十]+[).]|Q\d+)\s*', re.MULTILINE) # 生成新文档 doc = Document() for idx, q in enumerate(all_q, 1): # 处理首段落:移除原题序号并添加新序号 first_para = pattern.sub('', q[0].lstrip()) # 去除行首空格和原题序号 doc.add_paragraph(f"{idx}. {first_para}") # 处理后续段落(直接添加,保留原有格式) for p in q[1:]: doc.add_paragraph(p.rstrip('\n')) # 保留段落内换行 # 题目间用空行分隔(可选) doc.add_paragraph('') doc.save(output_file) print(f"合并完成!共{len(all_q)}题,已保存至{output_file}") if __name__ == "__main__": # 替换为实际文件路径 file1 = "C:\\Users\\kinmi\\Desktop\\12.docx" file2 = "C:\\Users\\kinmi\\Desktop\\13.docx" output_file = "merged_questions.docx" merge_question_docs(file1, file2, output_file)

浙公网安备 33010602011771号