如何基于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语言的面相对象编程方式初步学习
Mar 12 Python
Python实现视频下载功能
Mar 14 Python
Python发送http请求解析返回json的实例
Mar 26 Python
Python if语句知识点用法总结
Jun 10 Python
TensorFlow Session使用的两种方法小结
Jul 30 Python
浅谈Python 列表字典赋值的陷阱
Jan 20 Python
python opencv 批量改变图片的尺寸大小的方法
Jun 28 Python
如何安装并使用conda指令管理python环境
Jul 10 Python
Django框架ORM数据库操作实例详解
Nov 07 Python
python自动生成sql语句的脚本
Feb 24 Python
8g内存用python读取10文件_面试题-python 如何读取一个大于 10G 的txt文件?
May 28 Python
Python实现打乒乓小游戏
Sep 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
PHP实现图片批量打包下载功能
2017/03/01 PHP
在javascript将NodeList作为Array数组处理的方法
2010/07/09 Javascript
JavaScript初学者应注意的七个细节小结
2012/01/30 Javascript
基于jquery扩展漂亮的CheckBox(自己编写)
2013/11/19 Javascript
window.location.href中url中数据量太大时的解决方法
2013/12/23 Javascript
jQuery获取checkbox选中的值
2016/01/28 Javascript
每日十条JavaScript经验技巧(二)
2016/06/23 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
2016/11/12 Javascript
JQuery实现文字无缝滚动效果示例代码(Marquee插件)
2017/03/07 Javascript
vue项目中导入swiper插件的方法
2018/01/30 Javascript
三种Webpack打包方式(小结)
2018/09/19 Javascript
vue-cli中安装方法(图文详细步骤)
2018/12/12 Javascript
在vue使用clipboard.js进行一键复制文本的实现示例
2019/01/15 Javascript
JS使用Dijkstra算法求解最短路径
2019/01/17 Javascript
微信小程序登录数据解密及状态维持实例详解
2019/05/06 Javascript
JavaScript组合模式---引入案例分析
2020/05/23 Javascript
vue-axios同时请求多个接口 等所有接口全部加载完成再处理操作
2020/11/09 Javascript
[01:50]2014DOTA2西雅图邀请赛 专访欢乐周宝龙
2014/07/08 DOTA
Python Web框架Flask中使用百度云存储BCS实例
2015/02/08 Python
Python遍历文件夹和读写文件的实现方法
2017/05/10 Python
Python设计实现的计算器功能完整实例
2017/08/18 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
2019/08/09 Python
python处理document文档保留原样式
2019/09/23 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
2020/04/03 Python
详细分析Python垃圾回收机制
2020/07/01 Python
python入门:argparse浅析 nargs='+'作用
2020/07/12 Python
希尔顿酒店中国网站:Hilton中国
2017/03/11 全球购物
阿根廷旅游网站:almundo阿根廷
2018/02/12 全球购物
Sneaker Studio乌克兰:购买运动鞋
2018/03/26 全球购物
来自世界各地的优质葡萄酒:VineShop24
2018/07/09 全球购物
大学生农村教师实习自我鉴定
2013/09/21 职场文书
幼儿园秋游活动方案
2014/01/21 职场文书
浙大毕业生自荐信
2014/01/26 职场文书
店长职务说明书
2014/02/04 职场文书
小学校园文化建设汇报材料
2014/08/19 职场文书
react中的DOM操作实现
2021/06/30 Javascript