如何基于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的列表中利用remove()方法删除元素的教程
May 21 Python
Python实现利用最大公约数求三个正整数的最小公倍数示例
Sep 30 Python
Python3之读取连接过的网络并定位的方法
Apr 22 Python
python的concat等多种用法详解
Nov 28 Python
Python 最大概率法进行汉语切分的方法
Dec 14 Python
OpenCV+Python识别车牌和字符分割的实现
Jan 31 Python
python读取并写入mat文件的方法
Jul 12 Python
Django 项目通过加载不同env文件来区分不同环境
Feb 17 Python
PyQt使用QPropertyAnimation开发简单动画
Apr 02 Python
pytorch判断是否cuda 判断变量类型方式
Jun 23 Python
浅析Python中字符串的intern机制
Oct 03 Python
使用Python快速打开一个百万行级别的超大Excel文件的方法
Mar 02 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/11/29 PHP
PHP保存带BOM文件的方法
2015/02/12 PHP
php基于curl扩展制作跨平台的restfule 接口
2015/05/11 PHP
PHP使用stream_context_create()模拟POST/GET请求的方法
2016/04/02 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
php对象工厂类完整示例
2018/08/09 PHP
Linux基于php-fpm模式的lamp搭建phpmyadmin的方法
2018/10/25 PHP
php数组遍历类与用法示例
2019/05/24 PHP
JS event使用方法详解
2008/04/28 Javascript
兼容ie和firefox js关闭代码
2008/12/11 Javascript
JavaScript读取中文cookie时的乱码问题的解决方法
2009/10/14 Javascript
javascript 设计模式之单体模式 面向对象学习基础
2010/04/18 Javascript
ExtJS Store的数据访问与更新问题
2010/04/28 Javascript
Javascript遍历table中的元素示例代码
2014/07/08 Javascript
js实现同一页面可多次调用的图片幻灯切换效果
2015/02/28 Javascript
跟我学习javascript的执行上下文
2015/11/18 Javascript
javascript输出AscII码扩展集中的字符方法
2016/12/26 Javascript
总结几道关于Node.js的面试问题
2017/01/11 Javascript
bootstrap手风琴制作方法详解
2017/01/11 Javascript
js 动态生成html 触发事件传参字符转义的实例
2017/02/14 Javascript
浅谈原生JS实现jQuery的animate()动画示例
2017/03/08 Javascript
以BootStrap Tab为例写一个前端组件
2017/07/25 Javascript
利用ES6的Promise.all实现至少请求多长时间的实例
2017/08/28 Javascript
基于vue框架手写一个notify插件实现通知功能的方法
2019/03/31 Javascript
vue实现菜单切换功能
2019/05/08 Javascript
layui在form表单页面通过Validform加入简单验证的方法
2019/09/06 Javascript
python实现爬虫下载漫画示例
2014/02/16 Python
Python通过90行代码搭建一个音乐搜索工具
2015/07/29 Python
pandas 读取各种格式文件的方法
2018/06/22 Python
200行python代码实现贪吃蛇游戏
2020/04/24 Python
matplotlib事件处理基础(事件绑定、事件属性)
2021/02/03 Python
syb养殖创业计划书
2014/01/09 职场文书
《三亚落日》教学反思
2014/04/26 职场文书
JavaScript选择器函数querySelector和querySelectorAll
2021/11/27 Javascript