如何基于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打包文件夹的方法小结(zip,tar,tar.gz等)
Sep 18 Python
用Python下载一个网页保存为本地的HTML文件实例
May 21 Python
Python列表list排列组合操作示例
Dec 18 Python
python ctypes库2_指定参数类型和返回类型详解
Nov 19 Python
Python Numpy 自然数填充数组的实现
Nov 28 Python
使用Pyhton 分析酒店针孔摄像头
Mar 04 Python
Python tcp传输代码实例解析
Mar 18 Python
python实现126邮箱发送邮件
May 20 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
Jul 01 Python
python3 re返回形式总结
Nov 20 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
Dec 10 Python
python文件路径操作方法总结
Dec 21 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
DOTA2 探索永无止境 玩家自创强悍插眼攻略
2020/04/20 DOTA
PHP print类函数使用总结
2010/06/25 PHP
利用yahoo汇率接口实现实时汇率转换示例 汇率转换器
2014/01/14 PHP
实例介绍PHP的Reflection反射机制
2014/08/05 PHP
php array_merge函数使用需要注意的一个问题
2015/03/30 PHP
php给一组指定关键词添加span标签的方法
2015/03/31 PHP
Yii框架上传图片用法总结
2016/03/28 PHP
让浏览器非阻塞加载javascript的几种方法小结
2011/04/25 Javascript
实现变速回到顶部的JavaScript代码
2011/05/09 Javascript
ASP.NET jQuery 实例7 通过jQuery来获取DropDownList的Text/Value属性值
2012/02/03 Javascript
JQUERY 实现窗口滚动搜索框停靠效果(类似滚动停靠)
2013/03/27 Javascript
js清理Word格式示例代码
2014/02/13 Javascript
js取模(求余数)隔行变色
2014/05/15 Javascript
JavaScript中的公有、私有、特权和静态成员用法分析
2014/11/20 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
jQuery中attr()方法用法实例
2015/01/05 Javascript
JavaScript代码生成PDF文件的方法
2016/02/26 Javascript
Angular排序实例详解
2017/06/28 Javascript
JS库之Three.js 简易入门教程(详解之一)
2017/09/13 Javascript
Vue页面骨架屏注入方法
2018/05/13 Javascript
vue项目前端知识点整理【收藏】
2019/05/13 Javascript
vue中使用vue-print.js实现多页打印
2020/03/05 Javascript
JS判断数组是否包含某元素实现方法汇总
2020/06/24 Javascript
Django中URLconf和include()的协同工作方法
2015/07/20 Python
Python入门之三角函数tan()函数实例详解
2017/11/08 Python
Python基于csv模块实现读取与写入csv数据的方法
2018/01/18 Python
python实现连续图文识别
2018/12/18 Python
python找出因数与质因数的方法
2019/07/25 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
2019/08/15 Python
python 实现视频 图像帧提取
2019/12/10 Python
Python将list元素转存为CSV文件的实现
2020/11/16 Python
美国首屈一指的高品质珠宝设计师和零售商:Allurez
2018/01/23 全球购物
2014年小学安全工作总结
2014/12/04 职场文书
校运会班级霸气口号
2015/12/24 职场文书
go语言map与string的相互转换的实现
2021/04/07 Golang
Tomcat安装使用及部署Web项目的3种方法汇总
2022/08/14 Servers