如何基于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中的join()方法的使用
May 19 Python
Python编程中对super函数的正确理解和用法解析
Jul 02 Python
python抓取文件夹的所有文件
Feb 27 Python
TensorFlow搭建神经网络最佳实践
Mar 09 Python
在pandas多重索引multiIndex中选定指定索引的行方法
Nov 16 Python
对Python3 解析html的几种操作方式小结
Feb 16 Python
python实现在多维数组中挑选符合条件的全部元素
Nov 26 Python
django xadmin action兼容自定义model权限教程
Mar 30 Python
python开根号实例讲解
Aug 30 Python
如何从csv文件构建Tensorflow的数据集
Sep 21 Python
python 定义函数 返回值只取其中一个的实现
May 21 Python
利用Python实时获取steam特惠游戏数据
Jun 25 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
zen cart新进商品的随机排序修改方法
2010/09/10 PHP
使用array_map简单搞定PHP删除文件、删除目录
2014/10/29 PHP
thinkPHP微信分享接口JSSDK用法实例
2017/07/07 PHP
PHP多维数组指定多字段排序的示例代码
2018/05/16 PHP
javascript同步Import,同步调用外部js的方法
2008/07/08 Javascript
基于jQuery的图片不完全按比例自动缩小
2014/07/11 Javascript
node.js中的fs.lchown方法使用说明
2014/12/16 Javascript
jQuery给多个不同元素添加class样式的方法
2015/03/26 Javascript
JS实现下拉菜单赋值到文本框的方法
2015/08/18 Javascript
JS简单测试循环运行时间的方法
2016/09/04 Javascript
bootstrap组件之按钮式下拉菜单小结
2017/01/19 Javascript
jQuery.ajax向后台传递数组问题的解决方法
2017/05/12 jQuery
js Date()日期函数浏览器兼容问题解决方法
2017/09/12 Javascript
微信小程序清空输入框信息与实现屏幕往上滚动的示例代码
2020/06/23 Javascript
[01:11:10]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG加赛
2014/05/26 DOTA
Python算法应用实战之栈详解
2017/02/04 Python
itchat和matplotlib的结合使用爬取微信信息的实例
2017/08/25 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
2018/09/13 Python
对python 生成拼接xml报文的示例详解
2018/12/28 Python
解决python线程卡死的问题
2019/02/18 Python
python输出电脑上所有的串口名的方法
2019/07/02 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
2019/07/15 Python
使用pyecharts生成Echarts网页的实例
2019/08/12 Python
python实现单机五子棋
2020/08/28 Python
Clearly澳大利亚:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
东方通信股份有限公司VC面试题
2014/08/27 面试题
大学毕业生个人自荐信范文
2014/01/08 职场文书
七一表彰活动方案
2014/01/18 职场文书
献爱心倡议书
2014/04/14 职场文书
捐助倡议书范文
2014/04/15 职场文书
美国留学经济担保书
2014/05/20 职场文书
小学庆六一活动总结
2014/08/28 职场文书
小区的门卫岗位职责
2014/10/01 职场文书
2014年安全工作总结范文
2014/11/13 职场文书
python3+PyQt5+Qt Designer实现界面可视化
2021/06/10 Python
win10系统计算机图标怎么调出来?win10调出计算机图标的方法
2022/08/14 数码科技