python读取word文档并做简单的批量文档筛选

最近参与了一项解析大量的word文档(试验报告形式)的工作,因为其中包含着一些对项目无意义的报告,所以要进行初步地筛选,通过查阅资料发现了python-docx这个库,抱着学习与实践结合的态度,准备记录一下。

(一)python-docx库

  • 查阅官方的英文文档:python-docx文档
    python-docx is a Python library for creating and updating Microsoft Word (.docx) files.
    很直观地可以看出,这个包可以创建和更新以.docx为后缀的 MS word文件,并可以进行相关一系列的操作。
    安装:pip install python-docx (一般来说直接可以安上)
    或:pip install -i http://pypi.douban.com/simple python-docx
    或:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple python-docx
    (下面两种为使用镜像安装,最近发现用豆瓣镜像源安装第三方库基本都能安装上,感觉很方便而且速度也快,使用镜像安装需要加上-i,第二个是清华大学的镜像,应用起来也很方便,而且据说比豆瓣的镜像源还要全一些)

  • docx库中的一些基本操作

  1. 打开一个已有的文档
from docx import Document
document = Document(“test.docx”)
#打开已有的test.docx文档(路径可以自己制定 XX:/LL/MM.docx)并创建对象
document.save('test.docx') #名字不同另存为 名字相同覆盖
  1. 创建一个新的文档
#创建一个新的文档对象,保存为test.docx
from docx import Document
document = Document()
document.save('test.docx')
  1. 读取word文档内容(非表格表格
from docx import *
file = Document('test.docx')
for para in file.paragraphs:        # 遍历文档中的每个段落print( para.text )              # 输出每个段落的内容for tb in file.tables:              # 遍历文档中的每个表格for row in tb.rows:             # 遍历每个表格中的行for cell in row.cells:      # 遍历一行的所有单元格print( cell.text )      # 输出单元格的内容
print(doc.tables[0].cell(5,5).text) # 表格的具体定位
#tables[0]:文档中的第一个表格
#cell(5,5):表格中第六行第六列的单元格
  1. 向文档中写入内容
from docx import *
from docx.shared import Inches
import os
path="E:/temp2/"
file = Document() # 创建一个已存在的 word 文档的对象
# 添加标题,设置标题等级
file.add_heading('This is a document wirten by Python-docx',level=0)
file.add_heading('This is a document wirten by Python-docx',level=1)
file.add_heading('This is a document wirten by Python-docx',level=2)
paragraph = file.add_paragraph('This is a new paragraph') # 添加段落
# 在一段文字后面追加
paragraph.add_run('Wow').bold = True
paragraph.add_run('Good').italic = True
file.add_page_break()  # 新起一页
# 添加表格,第三个属性为带边框
table = file.add_table(rows=2, cols=2, style='Table Grid')
for i in range(2):for j in range(2):cell = table.cell(i, j)cell.text = "第" + str(i + 1) + "行第" + str(j + 1) + "列"
file.add_page_break()  # 新起一页
Names = os.listdir(path)
for Name in Names:if ".jpg" in Name:a=Namefile.add_picture(path + a, width=Inches(4.0))  # 添加图片paragraph = file.add_paragraph('')  # 添加段落
file.save(path + 'test.docx') # 保存新创建的 word 文档

(二)win32com模块

官方的介绍是:
Python extensions for Microsoft Windows Provides access to much of the Win32 API, the ability to create and use COM objects, and the Pythonwin environment.

大意就是win32com提供Python扩展的大部分Win32 API的访问,并且能够创建设使用COM对象和 Pythonwin环境.
由于该模块没有官方的文档介绍(可能是我没有搜到),所以我只是大概地记录一下

from win32com import client as wc
word = wc.Dispatch("Word.Application") #创建word对象实例
doc = word.Documents.Open( FileName = filename ) #打开新的word文档
newdoc = word.Documents.Add() # 创建新的文档myRange = doc.Range() # Range()方法指定文档范围
myRange.InsertBefore('Hello from Python!') # 插入文字doc.Save() # 文档保存
doc.SaveAs("xx.后缀",16) #文档另存为,可以对word进行转格式,以docx为例
#下面的列表为常用格式的参数代码

(三)批量筛选word文档

需求是筛选掉内容中没有“报告编号”字符的文档,因为待筛选的文档中存在着.doc和.docx文档,故需要先进行格式转换,然后再筛选.

在写程序的过程中记录的问题:

  • 在操作文档时,文件名中有空格的文档会导致程序报错,故在进行文档操作前对所有文件名进行去空格的重命名操作,其中涉及到字符串函数和文件名重命名函数,去空格直接用了replace(),方法很多只要实现就可以了,但是要注意到replace()返回一个新的字符串并不改变原字符串的内容;文件重命名用到了os模块下的rename(),两个参数都是路径+文件名。
import os
import docx
import shutil
from win32com import client as wc
path = "E:/pjtest/" #需要操作的文件夹目录
path1 = "E:/temp/"  #存储转docx文件夹目录
path2 = "E:/sxtest/" #存储筛选后文件夹目录
def ChangeAndSave(file):word = wc.Dispatch("Word.Application")doc = word.Documents.Open(path+file+".doc")doc.SaveAs(path1 + file+ ".docx",16)doc.Close()word.Quit()
def Judge(doc):counter=0for para in doc.paragraphs:counter=counter+1if "报告编号" in para.text:print("该报告是可用的")if ".docx" in rsfile:shutil.move(path1 + rsfile, path2)else:shutil.move(path1 + i[0]+".docx",path2)print("该报告已存入sxtest文件夹下")breakelse:if counter<len(doc.paragraphs):continueelse:print("该报告是不可用的")break
files= os.listdir(path) #得到文件夹下的所有文件名称
for file in files:#遍历文件夹oldname=path+filersfile=file.replace(" ","")#rsfile="".join(file.split()) 也可以用这种方法去空格newname=path+rsfileif oldname != newname:os.rename(oldname,newname)else:passif ".docx" in rsfile:shutil.move(path+rsfile,path1)print("该报告为.docx格式并已存入temp文件夹下")doc = docx.Document(path1 + rsfile)Judge(doc)else:i=rsfile.split(".doc")ChangeAndSave(i[0])print("该报告已转化为.docx格式并已存入temp文件夹下")doc = docx.Document(path1 + i[0]+".docx")Judge(doc)

python读取word文档并做简单的批量文档筛选相关推荐

  1. python读取word文件并替换部分文字_python批量替换

    本文讨论一下如果使用python来批量替换word中的内容.具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 一.目标: 在word文档中,将水果的名称由中文替换为英文. 而且我们有多份 ...

  2. python生成word文档的表格_2018-10-04 [日常]用Python读取word文档中的表格并比较

    演示如下. 两个简单的word文档, 各有一个表格: 读取文档中的表格到列表(为演示只对单列表格操作): import docx def 取表格(文件名): 文件 = docx.Document(文件 ...

  3. python读取word的方法,Python读取Word(.docx)正文信息的方法

    Python读取Word(.docx)正文信息的方法 本文介绍用Python简单读取*.docx文件信息,一些python-word库就是对这种方法的扩展. 介绍分两部分: Word(*.docx)文 ...

  4. python 读取 word 表格_python读取word表格

    python调用com,如何完成word表格操作 word中doc这个格式的文件是微软特有格式,微软没有向外公开任何的api接口文档,只能通过微软提供的OLE组件来提其COM接口,只要你的机器上安装了 ...

  5. python怎么重命名word文件,Python读取word文本操作详解

    本文研究的主要问题时Python读取word文本操作,分享了相关概念和实现代码,具体如下. 一,docx模块 Python可以利用python-docx模块处理word文档,处理方式是面向对象的.也就 ...

  6. python读取word内容复制粘贴,Python读取word文本操作详解

    本文研究的主要问题时Python读取word文本操作,分享了相关概念和实现代码,具体如下. 一,docx模块 Python可以利用python-docx模块处理word文档,处理方式是面向对象的.也就 ...

  7. python读取docx文件,就是如此简单

    中文编码问题总是让人头疼(尤其是mac本),想要用Python读取word中的内容.用open()经常报错,通过百度搜索+问身边小伙伴发现了Python有专门读取.docx的模块python_docx ...

  8. python处理表格数据-python读取word 中指定位置的表格及表格数据

    1.Word文档如下: 2.代码 # -*- coding: UTF-8 -*- from docx import Document def readSpecTable(filename, specT ...

  9. python读取word指定内容_python读取word 中指定位置的表格及表格数据

    1.Word文档如下: 2.代码 # -*- coding: UTF-8 -*- from docx import Document def readSpecTable(filename, specT ...

最新文章

  1. 阿里OceanBase GitHub点赞送礼引争议,CTO道歉,贾扬清、李沐讨论开源刷Star
  2. 怎么删除XP中无法删除的文件
  3. 第六章 BitArray类
  4. 阿里云消息队列 RocketMQ、Kafka 荣获金融级产品稳定性测评 “先进级” 认证
  5. 一个用于读unicode文本的迭代器(iterator)
  6. CF1045G AI robots(动态开点线段树)
  7. python也有数组 --- 标准库中的列表工具array()
  8. Spring Boot系列(十二)Spring Boot整合ActiveQ实现消息收发和订阅
  9. 英康手机订单系统APP使用说明
  10. 持续交付——不仅仅是技术
  11. 用户列表 html,用户列表.html
  12. 小程序毕设作品之微信酒店预订小程序毕业设计(8)毕业设计论文模板
  13. win10下使用pycharm实现基于pyg的cora+citeseer+pubmed数据集的JKNET模型测试
  14. 计算机上求平均分的公式,求平均值的公式
  15. 扫地阿姨看完都学会了!写给即将正在找工作的Java攻城狮,砥砺前行!
  16. HRT:使用Huge Pages进行低延迟优化
  17. 机动车c1科三考试语言灯光,史上最全科目三灯光模拟图解
  18. 2017 计蒜之道 初赛 第四场 (第二题) B. 商汤科技的行人检测(简单)
  19. 译文: C28x Compiler Error and Warning Messages
  20. 操作系统春招面试复习之:设备管理

热门文章

  1. 无锡华润上华公司实习感想
  2. python 课程设计题目_数据分析师能力培养:业务与技术的完美结合
  3. 最近学习太焦虑,如何戒骄戒躁,静下心来
  4. 电脑查服务器型号,怎么在服务器的操作系统中查看服务器的型号
  5. 编码器基础知识大扫盲
  6. 关于144hz屏幕观看网页视频时存在黑屏屏闪
  7. dede修改描述description限制字数长度
  8. 局域网计算机间的传输介质,计算机局域网知识点:传输介质
  9. 【程序员情商up】说话的智慧
  10. Win10系统下如何有效的关闭易升(系统自动更新)