介绍
舍友从网上下载的word题库文档很乱,手动改了大半天才改了一点,想起python是大名鼎鼎的自动化脚本,于是乎开始了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)
输出效果:
分析所需要删除的内容:
需求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创建Word文档,但是,我想尽可能多地重用现有的文档创建代码。我目前正在使用XSLT生成HTML文件,并以编程方式将其转换为PDF文件。但是,我的客户现在要求以Word(.doc)格式提供同一文档。 到目前为止,我没有太多运气找到该问题的解决方案。有谁知道可以帮助解决此问题的开源库(或 gulp 专有解决方案)? 注意:所有可能的解决方案必须在Linux上运行。我相
本文向大家介绍如何通过Java实现加密、解密Word文档,包括了如何通过Java实现加密、解密Word文档的使用技巧和注意事项,需要的朋友参考一下 前言 对一些重要文档,我们为保证其文档内容不被泄露,常需要对文件进行加密,查看文件时,需要正确输入密码才能打开文件。下面介绍了一种比较简单的方法给Word文件加密以及如何给已加密的Word文件解除密码保护。 使用工具:Free Spire.Doc fo
本文向大家介绍如何基于Python实现自动扫雷,包括了如何基于Python实现自动扫雷的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了如何基于Python实现自动扫雷,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 自动扫雷一般分为两种,一种是读取内存数据,而另一种是通过分析图片获得数据,并通过模拟鼠标操作,这里我用的是第二种方式。 一
本文向大家介绍如何基于Python Matplotlib实现网格动画,包括了如何基于Python Matplotlib实现网格动画的使用技巧和注意事项,需要的朋友参考一下 —1— 如果你对本文的代码感兴趣,可以去 Github (文末提供)里查看。第一次运行的时候会报一个错误(还没找到解决办法),不过只要再运行一次就正常了。 这篇文章虽然不是篇典型的数据科学类文章,不过它涉及到数据科学以及商业智能
本文向大家介绍Python实现基于HTTP文件传输实例,包括了Python实现基于HTTP文件传输实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python实现基于HTTP文件传输的方法。分享给大家供大家参考。具体实现方法如下: 一、问题: 因为需要最近看了一下通过POST请求传输文件的内容 并且自己写了Server和Client实现了一个简单的机遇HTTP的文件传输工具 二、实现代
给定对象数组: 如何构造查询,以便在DB中更新每个文档的名称字段,其中文档的id等于数组对象中的\u id? 这必须在单个查询中完成。查询必须使用mongoDB节点驱动程序语法。 例如: