如何基于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 获取新浪微博的最新公共微博实例分享
Jul 03 Python
Python多线程编程(八):使用Event实现线程间通信
Apr 05 Python
python爬虫框架scrapy实战之爬取京东商城进阶篇
Apr 24 Python
python正则表达式爬取猫眼电影top100
Feb 24 Python
Python之dict(或对象)与json之间的互相转化实例
Jun 05 Python
tensorflow: variable的值与variable.read_value()的值区别详解
Jul 30 Python
python元组和字典的内建函数实例详解
Oct 22 Python
Tensorflow的梯度异步更新示例
Jan 23 Python
详解python常用命令行选项与环境变量
Feb 20 Python
Django Form设置文本框为readonly操作
Jul 03 Python
如何使用Python自动生成报表并以邮件发送
Oct 15 Python
Django框架之路由用法
Jun 10 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新手上路(十三)
2006/10/09 PHP
php 301转向实现代码
2008/09/18 PHP
PHP 事务处理数据实现代码
2010/05/13 PHP
php获得用户ip地址的比较不错的方法
2014/02/08 PHP
Yii框架form表单用法实例
2014/12/04 PHP
JavaScript进阶教程(第四课第一部分)
2007/04/05 Javascript
jquery 图片上传按比例预览插件集合
2011/05/28 Javascript
同一页面多个商品倒计时JS 基于面向对象的javascript
2012/02/16 Javascript
jQuery实现可拖动的浮动层完整代码
2013/05/27 Javascript
jQuery控制li上下循环滚动插件用法实例(附demo源码下载)
2016/05/28 Javascript
Angular.js自定义指令学习笔记实例
2017/02/24 Javascript
利用NPM淘宝的node.js镜像加速nvm
2017/03/27 Javascript
Bootstrap 响应式实用工具实例详解
2017/03/29 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
2017/07/12 Javascript
微信小程序实现自定义picker选择器弹窗内容
2020/05/26 Javascript
vue实现动态按钮功能
2019/05/13 Javascript
koa2+vue实现登陆及登录状态判断
2019/08/15 Javascript
vuex实现购物车的增加减少移除
2020/06/28 Javascript
解决vue使用vant下拉框van-dropdown-item 绑定title值不变问题
2020/08/05 Javascript
[01:03:51]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第三场
2018/04/09 DOTA
Windows上配置Emacs来开发Python及用Python扩展Emacs
2015/11/20 Python
python中range()与xrange()用法分析
2016/09/21 Python
彻彻底底地理解Python中的编码问题
2018/10/15 Python
Python单元测试unittest的具体使用示例
2018/12/17 Python
selenium处理元素定位点击无效问题
2019/06/12 Python
django 使用全局搜索功能的实例详解
2019/07/18 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
2020/03/18 Python
Python super()方法原理详解
2020/03/31 Python
python新手学习使用库
2020/06/11 Python
css3实现书本翻页效果的示例代码
2021/03/08 HTML / CSS
Myprotein意大利官网:欧洲第一运动营养品牌
2018/11/22 全球购物
Linux管理员面试题 Linux admin interview questions
2016/07/08 面试题
小学生安全演讲稿
2014/04/25 职场文书
导游词之湖北武当山
2019/09/23 职场文书
MySQL 外键约束和表关系相关总结
2021/06/20 MySQL
vue实现拖拽交换位置
2022/04/07 Vue.js