Python自动化处理Word题库:去除冗余与修正格式实战

Theo
Theo
发布时间:2026-10-14| 2人浏览过
原创

本文介绍如何利用Python的python-docx库自动化处理杂乱的Word题库文档。通过遍历段落、识别特定字符(如序号后的点号、选项符号)及过滤无效行,实现自动删除多余空白、修正错误题号、合并选项行及移除“窗体顶端/底端”等冗余内容,最终生成格式规范的标准化文档。

Python自动化处理Word题库:去除冗余与修正格式实战

介绍

舍友从网上下载的Word题库文档排版混乱,手动调整耗时且效率低下。考虑到Python作为自动化脚本工具的强大能力,决定尝试使用Python对Word文档进行批量处理。

需求分析与处理逻辑

分析需求

对文档内容进行梳理,核心目标是保留题目正文与选项内容,并将题号重新从1开始连续编号。

代码实现与执行流程

编写代码

首先通过pip安装python-docx模块以支持Word文档操作。

读取Word文档内容。注意:若原始文件为.doc后缀,需先另存为.docx格式方可处理。


from docx import Document

# 打开文件
srcdocx = Document(‘src.docx‘)
# 遍历所有段落
for p in srcdocx.paragraphs:
  print(p.text)

输出效果:

分析所需要删除的内容:

需求1:

1 42.对餐后血糖显著升高的2型糖尿病者,可选用下列哪种药物(5.0分)

删除多余数字行

需求2:

42.对餐后血糖显著升高的2型糖尿病者,可选用下列哪种药物(5.0分) 修改正确的题目序号

需求3:

删除“窗体底端”“窗体顶端”

需求4:

A、 阿卡波糖 选项合成一行

需求5:

删除多余空白行

编写代码

核心逻辑是从源文档中逐段读取文字,执行相应的处理操作,最后将结果保存至目标文档。

对于需求1、3和5,实现方式较为直接:只需判断读取到的内容是否属于需要删除的类别(如纯数字行、特定文本或空行),若符合则不写入目标文档,从而间接实现删除功能。

针对需求2,通过观察发现正确题号后通常跟随“. ”(点号加空格)。因此,程序定位该分隔符的位置,截断前部的错误序号,插入正确的连续序号,拼接后保存至新文档,以此完成“修正题目序号”。

需求4的处理逻辑类似需求2,只需查找“、”符号的位置,将当前行与下一行内容合并,即可实现“合并两行”的效果。


from docx import Document

# 判断字符串是否为数字
def is_number(s):
  try:
    float(s)
    return True
  except ValueError:
    pass
  try:
    import unicodedata
    unicodedata.numeric(s)
    return True
  except (TypeError, ValueError):
    pass
  return False

# 修正错误题目序号
# src,源字符串 nPos,序号结束下标 cnt,正确序号
def changeNum(src,nPos,cnt):
  s = src[:0] + src[nPos:]
  str_list = list(s)
  str_list.insert(0, str(cnt))
  dest = ‘‘.join(str_list)
  return dest
  
# 源文档
srcdocx = Document(‘src.docx‘)
# 目标文档
outDocx = Document()
idx = 0 # 遍历下标
length = len(srcdocx.paragraphs) # 总段落数
cnt = 1 # 遍历序号
sum = 1 # 修改总次数

while(1):
  if idx >= length:
    break
  src = srcdocx.paragraphs[idx].text
  # 实现需求1,3,5
  if((src == "窗体底端") or (src =="窗体顶端") or (src == "") or (is_number(src))) :
    print(f"正在修改第{sum}处错误 {src}")
    sum = sum + 1 # 计算修改的次数
    idx = idx + 1
    continue
  # 实现需求2
  nPos1 = src.find(".")
  if nPos1 != -1 :
    # 查找到有序号的行
    dest = changeNum(src,nPos1,cnt)
    print(f"正在修改第{sum}处错误 {src}")
    sum = sum + 1 # 计算修改的次数
    cnt = cnt + 1 # 序号后移
    outDocx.add_paragraph(dest) # 写入数据到新word
  # 实现需求4
  nPos2 = src.find(‘、‘)
  if nPos2 != -1 :
    src2 = srcdocx.paragraphs[idx+1].text
    outDocx.add_paragraph(src+src2)
    idx = idx + 1
    print(f"正在修改第{sum}处错误 {src},{src2}")
    sum = sum + 1 # 计算修改的次数
  idx = idx + 1
  
outDocx.save(‘out.docx‘)
print(f"修改完成!共计{sum}个错误!")

运行效果:

最终效果

总结

Python是一款功能强大且入门门槛较低的工具。未来应加强Python的学习与应用。若本文能为您提供思路,则具有很大价值。正如名言所说:人生苦短,我用Python。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。