如何基于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和Ruby中each循环引用变量问题(一个隐秘BUG?)
Jun 04 Python
浅谈使用Python内置函数getattr实现分发模式
Jan 22 Python
对python中的乘法dot和对应分量相乘multiply详解
Nov 14 Python
Python操作json的方法实例分析
Dec 06 Python
python linecache 处理固定格式文本数据的方法
Jan 08 Python
Django JWT Token RestfulAPI用户认证详解
Jan 23 Python
元组列表字典(莫烦python基础)
Apr 03 Python
python logging模块书写日志以及日志分割详解
Jul 22 Python
python requests证书问题解决
Sep 05 Python
Python3 把一个列表按指定数目分成多个列表的方式
Dec 25 Python
Python timer定时器两种常用方法解析
Jan 20 Python
基于Python共轭梯度法与最速下降法之间的对比
Apr 02 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
PHP 字符串操作入门教程
2006/12/06 PHP
PHP漏洞全解(详细介绍)
2012/11/13 PHP
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
php使用MySQL保存session会话的方法
2015/06/18 PHP
Yii调试查看执行SQL语句的方法
2016/07/15 PHP
PHP中的正则表达式实例详解
2017/04/25 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
javascript window对象属性整理
2009/10/24 Javascript
JS鼠标事件大全 推荐收藏
2011/11/01 Javascript
利用JS实现浏览器的title闪烁
2013/07/08 Javascript
js 左右悬浮对联广告代码示例
2014/12/12 Javascript
AngularJS入门教程之REST和定制服务详解
2016/08/19 Javascript
原生JS实现图片轮播效果
2016/12/26 Javascript
使用jQuery卸载全部事件的思路详解
2017/04/03 jQuery
js实现点击切换checkbox背景图片的简单实例
2017/05/08 Javascript
p5.js入门教程之小球动画示例代码
2018/03/15 Javascript
基于D3.js实现时钟效果
2018/07/17 Javascript
JS监听事件的叠加和移除功能
2018/11/19 Javascript
微信小程序用户授权,以及判断登录是否过期的方法
2019/05/10 Javascript
深入探索VueJS Scoped CSS 实现原理
2019/09/23 Javascript
Vue组件间数据传递的方式(3种)
2020/07/13 Javascript
使用rpclib进行Python网络编程时的注释问题
2015/05/06 Python
apache部署python程序出现503错误的解决方法
2017/07/24 Python
使用Python进行中文繁简转换的实现代码
2019/10/18 Python
Python爬虫爬取电影票房数据及图表展示操作示例
2020/03/27 Python
HTML5拖拽文件到浏览器并实现文件上传下载功能代码
2013/06/06 HTML / CSS
美国乡村商店:Plow & Hearth
2016/09/12 全球购物
全球最大的中文旅行网站:去哪儿网
2017/11/16 全球购物
aden + anais英国官网:美国婴儿贴身用品品牌
2019/09/08 全球购物
接口的多继承会带来哪些问题
2015/08/17 面试题
法定代表人授权委托书范文
2014/09/22 职场文书
2015年高二班主任工作总结
2015/05/25 职场文书
交通安全学习心得体会
2016/01/18 职场文书
Java 数组内置函数toArray详解
2021/06/28 Java/Android
详解JavaScript的计时器和按钮效果设置
2022/02/18 Javascript
golang连接MySQl使用sqlx库
2022/04/14 Golang