如何基于Python实现word文档重新排版

作者:NiceThing 时间:2023-06-09 11:19:24 

介绍

舍友从网上下载的word题库文档很乱,手动改了大半天才改了一点,想起python是大名鼎鼎的自动化脚本,于是乎开始了python对word的一顿瞎操作。

如何基于Python实现word文档重新排版

分析需求

对文档中的内容进行分析,只留下题目,选项,并且题号要从1开始。

编写代码

pip安装python-docx模块

读取word文档内容(如果是以.doc后缀的文件需另存为.docx文件!)


from docx import Document

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

输出效果:

如何基于Python实现word文档重新排版

分析所需要删除的内容:

需求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实现word文档重新排版

最终效果

如何基于Python实现word文档重新排版

总结

Python还是一个极为强大的工具,并且门槛低,易入门,以后我要多多学习Python!如果我的博客能给你点思路,那就发挥了很大的作用了!人生苦短,我用Python~

来源:https://www.cnblogs.com/AllenMi/p/13662796.html

标签:Python,word,文档,排版
0
投稿

猜你喜欢

  • 深入研究ASP中的Session

    2007-09-13 12:37:00
  • 利用Pytorch实现简单的线性回归算法

    2022-09-08 00:00:09
  • Go实现Redis连接池方法

    2024-02-21 09:09:26
  • 对tf.reduce_sum tensorflow维度上的操作详解

    2023-01-07 14:10:28
  • Python利用pynput实现划词复制功能

    2022-03-28 23:14:23
  • mysql利用覆盖索引避免回表优化查询

    2024-01-12 21:34:11
  • python3爬虫中多线程的优势总结

    2023-05-15 02:41:07
  • Python运算符重载详解及实例代码

    2021-07-11 23:48:41
  • python的id()函数解密过程

    2023-03-04 00:17:52
  • golang 结构体初始化时赋值格式介绍

    2024-04-26 17:26:11
  • MySQL的数据类型和建库策略分析详解

    2024-01-14 11:33:30
  • python3 使用traceback定位异常实例

    2023-05-03 12:42:35
  • 在MySQL中使用XML数据—数据格式化

    2009-12-29 10:26:00
  • Python练习之ORM框架

    2021-03-10 11:34:20
  • Javascript 动画初探(实现)

    2009-02-06 15:56:00
  • linux环境搭建图数据库neo4j的讲解

    2024-01-16 22:55:31
  • Python实现TOPSIS分析法的示例代码

    2021-05-09 19:32:47
  • Python 递归式实现二叉树前序,中序,后序遍历

    2022-09-22 17:38:32
  • python里的条件语句和循环语句你了解多少

    2022-07-19 02:27:49
  • IE9报“DOM Exception: INVALID_CHARACTER_ERR (5)”错误的原因及解决办法

    2011-09-01 19:11:07
  • asp之家 网络编程 m.aspxhome.com