您的位置:首页技术文章
文章详情页

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

【字号: 日期:2022-07-09 15:45:34浏览:37作者:猪猪

介绍

舍友从网上下载的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:

142.对餐后血糖显著升高的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~

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

标签: python
相关文章: