两套试题融合成一个

两套试题融合成一个

  

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)

 

posted @ 2025-06-04 20:00  szmtjs10  阅读(30)  评论(0)    收藏  举报