如何基于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中调用ggplot的三种方法
Apr 08 Python
Scrapy-redis爬虫分布式爬取的分析和实现
Feb 07 Python
Python用61行代码实现图片像素化的示例代码
Dec 10 Python
python爬取酷狗音乐排行榜
Feb 20 Python
python七夕浪漫表白源码
Apr 05 Python
使用Python函数进行模块化的实现
Nov 15 Python
解决tensorflow添加ptb库的问题
Feb 10 Python
Python3 selenium 实现QQ群接龙自动化功能
Apr 17 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
May 26 Python
对Python 字典元素进行删除的方法
Jul 31 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
Sep 24 Python
Python中的嵌套循环详情
Mar 23 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
Laravel框架中扩展函数、扩展自定义类的方法
2014/09/04 PHP
thinkphp文件处理类Dir.class.php的用法分析
2014/12/08 PHP
php生成shtml类用法实例
2014/12/09 PHP
PHP Warning: Module 'modulename' already loaded in问题解决办法
2015/03/16 PHP
Jquery判断IE6等浏览器的代码
2011/04/05 Javascript
html dom节点操作(获取/修改/添加或删除)
2014/01/23 Javascript
jquery实现页面图片等比例放大缩小功能
2014/02/12 Javascript
用js代码和插件实现wordpress雪花飘落效果的四种方法
2014/12/15 Javascript
JavaScript生成随机数的4种自定义函数分享
2015/02/28 Javascript
js实现跨域的多种方法
2015/12/25 Javascript
jQuery图片轮播实现并封装(一)
2016/12/03 Javascript
JavaScript基本类型值-Number类型
2017/02/24 Javascript
基于vue打包后字体和图片资源失效问题的解决方法
2018/03/06 Javascript
layui之select的option叠加问题的解决方法
2018/03/08 Javascript
在Vue中获取组件声明时的name属性方法
2018/09/12 Javascript
Vue中的作用域CSS和CSS模块的区别
2018/10/09 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
2019/09/18 Javascript
javascript实现时钟动画
2020/12/03 Javascript
python3.5基于TCP实现文件传输
2020/03/20 Python
python3.4 将16进制转成字符串的实例
2019/06/12 Python
python3 实现的对象与json相互转换操作示例
2019/08/17 Python
Python-numpy实现灰度图像的分块和合并方式
2020/01/09 Python
使用卷积神经网络(CNN)做人脸识别的示例代码
2020/03/27 Python
Selenium 配置启动项参数的方法
2020/12/04 Python
英国创新设计文具、卡片和礼品包装网站:Paperchase
2018/07/14 全球购物
移动通信行业实习自我鉴定
2013/09/28 职场文书
历史系自荐信范文
2013/12/24 职场文书
出差报告格式模板
2014/11/06 职场文书
2015年三八妇女节活动总结
2015/02/06 职场文书
大学生旷课检讨书1000字
2015/02/19 职场文书
搞笑的婚礼主持词
2015/06/29 职场文书
《比尾巴》教学反思
2016/02/24 职场文书
选择比努力更重要?这是长期以来对“努力”的最大误解
2019/07/12 职场文书
详解Mysql 函数调用优化
2021/04/07 MySQL
分析mysql中一条SQL查询语句是如何执行的
2021/06/21 MySQL
经典《舰娘》游改全新动画预告 预定11月开播
2022/04/01 日漫