如何基于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自然语言编码转换模块codecs介绍
Apr 08 Python
Python中使用partial改变方法默认参数实例
Apr 28 Python
Python检测字符串中是否包含某字符集合中的字符
May 21 Python
Python的Socket编程过程中实现UDP端口复用的实例分享
Mar 19 Python
python学生管理系统
Jan 30 Python
详解使用django-mama-cas快速搭建CAS服务的实现
Oct 30 Python
python bluetooth蓝牙信息获取蓝牙设备类型的方法
Nov 29 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
Jan 16 Python
基于Tensorflow使用CPU而不用GPU问题的解决
Feb 07 Python
PyCharm GUI界面开发和exe文件生成的实现
Mar 04 Python
Python unittest基本使用方法代码实例
Jun 29 Python
利用Python实现学生信息管理系统的完整实例
Dec 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
Session保存到数据库的php类分享
2011/10/24 PHP
PHP运行SVN命令显示某用户的文件更新记录的代码
2014/01/03 PHP
php自定义加密与解密程序实例
2014/12/31 PHP
php获取本周开始日期和结束日期的方法
2015/03/09 PHP
cakephp常见知识点汇总
2017/02/24 PHP
Javascript事件实例详解
2013/11/06 Javascript
jQuery中andSelf()方法用法实例
2015/01/08 Javascript
jQuery实现友好的轮播图片特效
2015/01/12 Javascript
使用js画图之饼图
2015/01/12 Javascript
JavaScript获取页面中表单(form)数量的方法
2015/04/03 Javascript
Node.js包管理器Yarn的入门介绍与安装
2016/10/17 Javascript
探讨AngularJs中ui.route的简单应用
2016/11/16 Javascript
JavaScript实现各种排序的代码详解
2017/08/28 Javascript
原生JS实现循环Nodelist Dom列表的4种方式示例
2018/02/11 Javascript
解决layer弹出层中表单不起作用的问题
2019/09/09 Javascript
layui 富文本编辑器和textarea值的相互传递方法
2019/09/18 Javascript
vue实现动态给id赋值,点击事件获取当前点击的元素的id操作
2020/11/09 Javascript
[01:29]2014DOTA2展望TI 剑指西雅图DK战队专访
2014/06/30 DOTA
跟老齐学Python之私有函数和专有方法
2014/10/24 Python
Python编程求质数实例代码
2018/01/31 Python
python实现计数排序与桶排序实例代码
2019/03/28 Python
Python Pandas实现数据分组求平均值并填充nan的示例
2019/07/04 Python
WxPython实现无边框界面
2019/11/18 Python
python实现人像动漫化的示例代码
2020/05/17 Python
基于Python-Pycharm实现的猴子摘桃小游戏(源代码)
2021/02/20 Python
计算机相关的自我评价
2014/01/15 职场文书
学生安全教育材料
2014/02/14 职场文书
财务总监岗位职责
2014/03/07 职场文书
学习保证书范文
2014/04/30 职场文书
张家口市高新区党工委群众路线教育实践活动整改方案
2014/10/25 职场文书
党的群众路线教育实践活动制度建设计划方案
2014/10/31 职场文书
2014年保卫部工作总结
2014/11/21 职场文书
培训班开班主持词
2015/07/02 职场文书
AJAX实现指定部分页面刷新效果
2021/10/16 Javascript
Consul在linux环境的集群部署
2022/04/08 Servers
多线程Spring通过@Scheduled实现定时任务
2022/05/25 Java/Android