如何基于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检查序列seq是否含有aset中项的方法
Jun 30 Python
详解在Python的Django框架中创建模板库的方法
Jul 20 Python
python实现ID3决策树算法
Dec 20 Python
python3+PyQt5实现柱状图
Apr 24 Python
Python实现最大子序和的方法示例
Jul 05 Python
python 执行终端/控制台命令的例子
Jul 12 Python
Django组件content-type使用方法详解
Jul 19 Python
Python matplotlib绘制饼状图功能示例
Sep 10 Python
python绘制彩虹图
Dec 16 Python
Python中Selenium库使用教程详解
Jul 23 Python
Python实现Excel自动分组合并单元格
Feb 22 Python
Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解
Aug 14 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
生成缩略图
2006/10/09 PHP
php中取得文件的后缀名?
2012/02/20 PHP
为百度UE编辑器上传图片添加水印功能
2015/04/16 PHP
Composer设置忽略版本匹配的方法
2016/04/27 PHP
Laravle eloquent 多对多模型关联实例详解
2017/11/22 PHP
PHP中define() 与 const定义常量的区别详解
2019/06/25 PHP
在 Laravel 项目中使用 webpack-encore的方法
2019/07/21 PHP
Prototype Date对象 学习
2009/07/12 Javascript
传智播客学习之JavaScript基础篇
2009/11/13 Javascript
Node.js中child_process实现多进程
2015/02/03 Javascript
JavaScript匿名函数之模仿块级作用域
2015/12/12 Javascript
浅谈js内置对象Math的属性和方法(推荐)
2016/09/19 Javascript
vue2.0 keep-alive最佳实践
2017/07/06 Javascript
JS实现点击链接切换显示隐藏内容的方法
2017/10/19 Javascript
生成无限制的微信小程序码的示例代码
2019/09/20 Javascript
javascript自定义加载loading效果
2020/09/15 Javascript
基于Vue.js+Nuxt开发自定义弹出层组件
2020/10/09 Javascript
梳理一下vue中的生命周期
2020/12/30 Vue.js
[02:43]2018DOTA2亚洲邀请赛主赛事首日TOP5
2018/04/04 DOTA
[55:35]DOTA2-DPC中国联赛 正赛 CDEC vs Dragon BO3 第二场 1月22日
2021/03/11 DOTA
python logging类库使用例子
2014/11/22 Python
Python使用xlrd读取Excel格式文件的方法
2015/03/10 Python
python利用MethodType绑定方法到类示例代码
2017/08/27 Python
Python cookbook(数据结构与算法)将序列分解为单独变量的方法
2018/02/13 Python
Python 装饰器实现DRY(不重复代码)原则
2018/03/05 Python
python实现随机漫步算法
2018/08/27 Python
浅谈python之高阶函数和匿名函数
2019/03/21 Python
Hertz荷兰:荷兰和全球租车
2018/01/07 全球购物
奖学金自我鉴定范文
2013/10/03 职场文书
电气工程和自动化自荐信范文
2013/12/25 职场文书
巧克力蛋糕店创业计划书
2014/01/14 职场文书
施工员岗位职责
2015/02/10 职场文书
2016年情人节广告语
2016/01/28 职场文书
Python写情书? 10行代码展示如何把情书写在她的照片里
2022/04/21 Python
vue实现登陆页面开发实践
2022/05/30 Vue.js
vue中data里面的数据相互使用方式
2022/06/05 Vue.js