如何基于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之模块的加载
Oct 24 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
Nov 19 Python
python flask实现分页效果
Jun 27 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
Mar 15 Python
Linux下python3.6.1环境配置教程
Sep 26 Python
解决Python 使用h5py加载文件,看不到keys()的问题
Feb 08 Python
python numpy实现文件存取的示例代码
May 26 Python
Python逐行读取文件内容的方法总结
Feb 14 Python
django模型类中,null=True,blank=True用法说明
Jul 09 Python
python使用selenium爬虫知乎的方法示例
Oct 28 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
Nov 24 Python
Python实现仓库管理系统
May 30 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 MYSQL中插入当前时间
2008/04/06 PHP
基于php实现长连接的方法与注意事项的问题
2013/05/10 PHP
Yii中CGridView关联表搜索排序方法实例详解
2014/12/03 PHP
php装饰者模式简单应用案例分析
2019/10/23 PHP
基于jquery的模态div层弹出效果
2010/08/21 Javascript
jQuery层级选择器用法分析
2015/02/10 Javascript
JavaScript+html5 canvas制作的百花齐放效果完整实例
2016/01/26 Javascript
非常酷炫的Bootstrap图片轮播动画
2016/05/27 Javascript
AngularJS基础 ng-disabled 指令详解及简单示例
2016/08/01 Javascript
js实现华丽的九九乘法表效果
2017/03/29 Javascript
微信小程序 navbar实例详解
2017/05/11 Javascript
Node.js使用gm拼装sprite图片
2017/07/04 Javascript
javascript数组元素删除方法delete和splice解析
2019/12/09 Javascript
[50:59]2018DOTA2亚洲邀请赛 4.7 总决赛 LGD vs Mineski第四场
2018/04/10 DOTA
Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
2014/05/06 Python
python计算文本文件行数的方法
2015/07/06 Python
Django Admin实现上传图片校验功能
2016/03/06 Python
python字符类型的一些方法小结
2016/05/16 Python
Python实现优先级队列结构的方法详解
2016/06/02 Python
利用Python查看目录中的文件示例详解
2017/08/28 Python
python3.5 tkinter实现页面跳转
2018/01/30 Python
在Windows中设置Python环境变量的实例讲解
2018/04/28 Python
Flask之请求钩子的实现
2018/12/23 Python
Python判断对象是否相等及eq函数的讲解
2019/02/25 Python
谈谈Python中的while循环语句
2019/03/10 Python
Pyspark读取parquet数据过程解析
2020/03/27 Python
使用css3绘制出各种几何图形
2016/08/17 HTML / CSS
利用HTML5+CSS3实现3D转换效果实例详解
2017/05/02 HTML / CSS
Html5元素及基本语法详解
2016/08/02 HTML / CSS
美国当红的名品折扣网:Gilt Groupe
2016/08/15 全球购物
女方婚礼新郎答谢词
2014/01/11 职场文书
设计师个人求职信范文
2014/02/02 职场文书
应届毕业生通用的自荐书范文
2014/02/07 职场文书
个人简历自我评价怎么写
2015/03/10 职场文书
【海涛教你打DOTA】剑圣第一人称视角解说
2022/04/01 DOTA
Hive常用日期格式转换语法
2022/06/25 数据库