如何基于Python实现word文档重新排版

 更新时间:2020年09月29日 08:34:29   作者:NiceThing  
这篇文章主要介绍了如何基于Python实现word文档重新排版,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

介绍

舍友从网上下载的word题库文档很乱,手动改了大半天才改了一点,想起python是大名鼎鼎的自动化脚本,于是乎开始了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)

输出效果:

分析所需要删除的内容:

需求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还是一个极为强大的工具,并且门槛低,易入门,以后我要多多学习Python!如果我的博客能给你点思路,那就发挥了很大的作用了!人生苦短,我用Python~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Python常用模块os.path之文件及路径操作方法

    Python常用模块os.path之文件及路径操作方法

    os.path 模块主要用于获取文件的属性。这篇文章主要介绍了Python常用模块os.path——文件及路径操作,需要的朋友可以参考下
    2019-12-12
  • 深入讲解Python编程中的字符串

    深入讲解Python编程中的字符串

    这篇文章主要介绍了Python编程中的字符串,包括字符串的格式化与三引号的使用等,需要的朋友可以参考下
    2015-10-10
  • Python中对象的引用与复制代码示例

    Python中对象的引用与复制代码示例

    这篇文章主要介绍了Python中对象的引用与复制代码示例,具有一定借鉴价值,需要的朋友可以了解下。
    2017-12-12
  • python一招完美搞定Chromedriver的自动更新问题

    python一招完美搞定Chromedriver的自动更新问题

    这篇文章主要介绍了python一招完美搞定Chromedriver的自动更新,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • python中解析json格式文件的方法示例

    python中解析json格式文件的方法示例

    这篇文章主要给大家介绍了python中解析json格式文件的相关资料,解析json文件就是编码和解码,本文还介绍了在解析中可能遇到的问题与解决方法,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-05-05
  • Python 如何实时向文件写入数据(附代码)

    Python 如何实时向文件写入数据(附代码)

    这篇文章主要介绍了Python 如何实时向文件写入数据(附代码),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • python处理PHP数组文本文件实例

    python处理PHP数组文本文件实例

    这篇文章主要介绍了python处理PHP数组文本文件实例,本文的PHP数组文本是多个redis数据库的配置文件,需求是提取相关参数组合成Shell命令,需要的朋友可以参考下
    2014-09-09
  • python中的break、continue、exit()、pass全面解析

    python中的break、continue、exit()、pass全面解析

    下面小编就为大家带来一篇python中的break、continue、exit()、pass全面解析。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Python报错no module named torch的几种原因及解决方案

    Python报错no module named torch的几种原因及解决方案

    这篇文章主要给大家介绍了关于Python报错no module named torch的几种原因及解决方案,这是小白时常犯的错,这个报错一般说明在你电脑当前环境下没有安装torch这个模块,但也有其他情况,需要的朋友可以参考下
    2023-10-10
  • Python常见内置高阶函数即高阶函数用法

    Python常见内置高阶函数即高阶函数用法

    这篇文章主要介绍了Python的三种高阶函数map、filter、reduce,高阶函数就是一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),满足其一则为高阶函数,具体内容,需要的朋友可以参考下面文章的介绍
    2021-12-12

最新评论