如何基于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使用chardet判断字符编码
May 09 Python
Python算法之图的遍历
Nov 16 Python
Python决策树分类算法学习
Dec 22 Python
浅谈Python NLP入门教程
Dec 25 Python
几种实用的pythonic语法实例代码
Feb 24 Python
Python使用Selenium+BeautifulSoup爬取淘宝搜索页
Feb 24 Python
python 运用Django 开发后台接口的实例
Dec 11 Python
Python输出\u编码将其转换成中文的实例
Dec 15 Python
Python图像处理之直线和曲线的拟合与绘制【curve_fit()应用】
Dec 26 Python
基于Pytorch SSD模型分析
Feb 18 Python
Pycharm如何导入python文件及解决报错问题
May 10 Python
Pymysql实现往表中插入数据过程解析
Jun 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
深入PHP empty(),isset(),is_null()的实例测试详解
2013/06/06 PHP
修改apache配置文件去除thinkphp url中的index.php
2014/01/17 PHP
3个PHP多维数组转为一维数组的方法实例
2014/03/13 PHP
JQuery 将元素显示在屏幕的中央的代码
2010/02/27 Javascript
javascript中的绑定与解绑函数应用示例
2013/06/24 Javascript
JS 两日期相减,获得天数的小例子(兼容IE,FF)
2013/07/01 Javascript
Js判断参数(String,Array,Object)是否为undefined或者值为空
2013/11/04 Javascript
jquery让返回的内容显示在特定div里(代码少而精悍)
2014/06/23 Javascript
JS实现的仿淘宝交易倒计时效果
2015/11/27 Javascript
创建基于Bootstrap的下拉菜单的DropDownList的JQuery插件
2016/06/02 Javascript
BootStrap 附加导航组件
2016/07/22 Javascript
BootStrap与validator 使用笔记(JAVA SpringMVC实现)
2016/09/21 Javascript
jQuery选择器特殊字符与属性空格问题
2017/08/14 jQuery
Vue侧滑菜单组件——DrawerLayout
2017/12/18 Javascript
nodejs微信扫码支付功能实现
2018/02/17 NodeJs
JavaScript 替换所有匹配内容及正则替换方法
2020/02/12 Javascript
[01:25]DOTA2自定义游戏灵园鬼域等你踏足
2015/10/30 DOTA
学习python (2)
2006/10/31 Python
python实现爬虫统计学校BBS男女比例之多线程爬虫(二)
2015/12/31 Python
Python处理JSON数据并生成条形图
2016/08/05 Python
python学习之面向对象【入门初级篇】
2017/01/21 Python
python让列表倒序输出的实例
2018/06/25 Python
使用python PIL库实现简单验证码的去噪方法步骤
2019/05/10 Python
pytorch 归一化与反归一化实例
2019/12/31 Python
浅谈matplotlib中FigureCanvasXAgg的用法
2020/06/16 Python
Wilson体育用品官网:美国著名运动器材品牌
2019/05/12 全球购物
飞利浦西班牙官方网站:Philips西班牙
2020/02/17 全球购物
材料物理专业个人求职信
2013/12/15 职场文书
适用于所有创业者的创业计划书
2014/02/05 职场文书
美容院营销方案
2014/03/05 职场文书
六个一活动实施方案
2014/03/21 职场文书
乡镇镇长个人整改措施
2014/10/01 职场文书
简历自我评价范文
2019/04/24 职场文书
创业计划书之珠宝饰品
2019/08/26 职场文书
Go语言 go程释放操作(退出/销毁)
2021/04/30 Golang
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
2022/06/01 Servers