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


Posted in Python onSeptember 29, 2020

介绍

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

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

Python 相关文章推荐
python访问纯真IP数据库的代码
May 19 Python
Python写的Socks5协议代理服务器
Aug 06 Python
Python查看微信撤回消息代码
Jun 07 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
Oct 11 Python
django小技巧之html模板中调用对象属性或对象的方法
Nov 30 Python
机器学习实战之knn算法pandas
Jun 22 Python
cProfile Python性能分析工具使用详解
Jul 22 Python
python re.sub()替换正则的匹配内容方法
Jul 22 Python
python编程进阶之类和对象用法实例分析
Feb 21 Python
Django REST 异常处理详解
Jul 15 Python
利用Python判断你的密码难度等级
Jun 02 Python
python用海龟绘图写贪吃蛇游戏
Jun 18 Python
python实现简单贪吃蛇游戏
Sep 29 #Python
python爬虫---requests库的用法详解
Sep 28 #Python
如何在scrapy中捕获并处理各种异常
Sep 28 #Python
python向企业微信发送文字和图片消息的示例
Sep 28 #Python
python利用tkinter实现图片格式转换的示例
Sep 28 #Python
python在CMD界面读取excel所有数据的示例
Sep 28 #Python
python调用摄像头的示例代码
Sep 28 #Python
You might like
德生S2000收音机更换“钕铁硼”全频扬声器
2021/03/02 无线电
centos 5.6 升级php到5.3的方法
2011/05/14 PHP
php命令行使用方法和命令行参数说明
2014/04/08 PHP
PHP实现数组递归转义的方法
2014/08/28 PHP
PHP实现的支付宝支付功能示例
2019/03/26 PHP
Laravel5.5 数据库迁移:创建表与修改表示例
2019/10/23 PHP
Ext grid 添加右击菜单
2009/11/26 Javascript
Javascript创建自定义对象 创建Object实例添加属性和方法
2012/06/04 Javascript
jQuery当鼠标悬停时放大图片的效果实例
2013/07/03 Javascript
getJSON调用后台json数据时函数被调用两次的原因猜想
2013/09/29 Javascript
jquery获取元素值的方法(常见的表单元素)
2013/11/15 Javascript
jQuery选择器源码解读(四):tokenize方法的Expr.preFilter
2015/03/31 Javascript
JavaScript的RequireJS库入门指南
2015/07/01 Javascript
javascript数组对象常用api函数小结(连接,插入,删除,反转,排序等)
2016/09/20 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
2017/04/25 jQuery
vue时间格式化实例代码
2017/06/13 Javascript
微信小程序表单弹窗实例
2018/07/19 Javascript
jQuery实现左右两个列表框的内容相互移动功能示例
2019/01/27 jQuery
详解微信小程序「渲染层网络层错误」的解决方法
2021/01/06 Javascript
python获取一组汉字拼音首字母的方法
2015/07/01 Python
Python将阿拉伯数字转换为罗马数字的方法
2015/07/10 Python
详解Python函数作用域的LEGB顺序
2016/05/14 Python
基于Python代码编辑器的选用(详解)
2017/09/13 Python
wxPython色环电阻计算器
2019/11/18 Python
Python3 Click模块的使用方法详解
2020/02/12 Python
Django 拼接两个queryset 或是两个不可以相加的对象实例
2020/03/28 Python
keras实现基于孪生网络的图片相似度计算方式
2020/06/11 Python
Python中Qslider控件实操详解
2021/02/20 Python
园林资料员岗位职责
2013/12/30 职场文书
生物科学专业职业规划书范文
2014/02/11 职场文书
普通党员对照检查材料
2014/09/24 职场文书
酒店辞职书范文
2015/02/26 职场文书
小升初自荐信怎么写
2015/03/26 职场文书
学生病假条范文
2015/08/17 职场文书
五年级语文教学反思
2016/03/03 职场文书
python基于tkinter制作无损音乐下载工具
2021/03/29 Python