介绍

舍友从网上下载的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 排版_如何基于Python实现word文档重新排版相关推荐

  1. python word排版_如何基于Python实现word文档重新排版

    介绍 舍友从网上下载的word题库文档很乱,手动改了大半天才改了一点,想起python是大名鼎鼎的自动化脚本,于是乎开始了python对word的一顿瞎操作. 分析需求 对文档中的内容进行分析,只留下 ...

  2. 计算机科学与python编程导论_【基于Python】MIT OCW 计算机科学与编程导论

    [基于Python]MIT OCW 计算机科学与编程导论 (MIT Course Number 6.0001)Introduction to Computer Science and Programm ...

  3. 如何用python制作动画_如何基于Python Matplotlib实现网格动画

    -1- 如果你对本文的代码感兴趣,可以去 Github (文末提供)里查看.第一次运行的时候会报一个错误(还没找到解决办法),不过只要再运行一次就正常了. 这篇文章虽然不是篇典型的数据科学类文章,不过 ...

  4. python 高精度时间_如何基于Python代码实现高精度免费OCR工具

    近期Github开源了一款基于Python开发.名为Textshot的截图工具,刚开源不到半个月已经500+Star. 这两天抽空看了一下Textshot的源码,的确是一个值得介绍的项目. 相对于大多 ...

  5. python web论坛_十个基于Python的BBS论坛类开源web框架汇总(附源码地址)

    1.LBForum LBForum是用django开发的论坛系统,LBForum主要注重部署的方便性和易用性,功能方面目前还比较简单. LBForum的开发尽量遵照Django可复用app原则,因此即 ...

  6. 高等数学与python高级应用_高等数学——基于Python的实现

    商品详情 书名:高等数学--基于Python的实现 定价:45.8 ISBN:9787121382437 作者:官金兰 版次:第1版 出版时间:2020-07 内容提要: 本书旨在用通俗易懂的语言介绍 ...

  7. python扫雷算法_如何基于Python实现自动扫雷

    这篇文章主要介绍了如何基于Python实现自动扫雷,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 自动扫雷一般分为两种,一种是读取内存数据,而另一种 ...

  8. python bbs论坛_十个基于Python的BBS论坛类开源web框架汇总(附源码地址)

    1.LBForum LBForum是用django开发的论坛系统,LBForum主要注重部署的方便性和易用性,功能方面目前还比较简单. LBForum的开发尽量遵照Django可复用app原则,因此即 ...

  9. python 抽奖器_如何基于python实现年会抽奖工具

    用python来实现一个抽奖程序,供大家参考,具体内容如下 主要功能有 1.从一个csv文件中读入所有员工工号 2.将这些工号初始到一个列表中 3.用random模块下的choice函数来随机选择列表 ...

  10. 自从学会Python后,无视百度文库VIP,所有文档免费下载阅读

    最近要用到百度文库查资料,但是很多都需要付费VIP或者下载券,还不能复制,就有点苦逼! 还好小编会Python,在Python面前真的所有VIP都是小意思,啥视频网站,资料网站等等,统统无视收费机制! ...

最新文章

  1. 使用迭代器遍历List的时候修改List报ConcurrentModificationException异常原因分析
  2. 字节(byte)简介
  3. 学习分布式不得不会的CAP理论
  4. centos升级gcc
  5. 现代游戏中的UX趋势
  6. 公式写成matlab代码,大话遗传算法(含Matlab代码)
  7. linux ifort编译命令,[转载][Linux] icc与ifort编译器
  8. 详解基于图卷积的半监督学习(附代码)
  9. [绍棠] 如何为iOS app添加AirDrop文件分享功能
  10. FlashFXP,flashfxp连接失败
  11. layui多文件一次性上传案例
  12. 玩转外贸LinkedIn必备的三大特质,以及突破六度人脉技巧
  13. 【AICG】动漫女主AI绘图的学习笔记
  14. EXCELVBA: 中国热力图 HeatMap of China
  15. 鸿蒙之境法有三乘,神都夜行录鸿蒙之境怎么打 神都夜行录鸿蒙之境阵容搭配推荐...
  16. IDEA使用自带maven还是自行配置maven
  17. UiPath中Assign活动的作用是什么
  18. numba : python complier for cuda
  19. 智慧安监系统为城市安全监管提供保障
  20. foobar添加歌词插件

热门文章

  1. Ubuntu菜单栏和任务栏不见了 解决方案
  2. win7 安装 python3.8.10
  3. 网络层(六)MAC地址与IP地址
  4. 还原数据库SQL语句
  5. 美食节、灯光节等线下展销会活动公众号文章推广链接如何做到不被微信屏蔽拦截?
  6. 001深度强化学习的异步方法
  7. 整理学习之多任务学习
  8. 基于HyperLPR的车牌识别(十三)
  9. Could not install from “tippy.js\dist\tippy.css“ as it does not contain a package.json file.
  10. 解读x86、ARM和MIPS三种主流芯片架构