Python Word文档处理 上篇:python-docx

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python Word文档处理 上篇:python-docx相关的知识,希望对你有一定的参考价值。

参考技术A 某天我收到一个需求:希望能够用python对word文档进行一些处理,比如更换一些文字以及添加批注。

简单搜索后,我发现 python-docx 是一个处理docx文档的常用python库,因此我打算用它来进行进一步开发。

官方文档 提供了一个简单的示例

python-docx 将文档抽象为document对象、paragraph对象以及run对象,提供了围绕这些对象进行简单处理的API

然而在文档中并没有出现关于批注操作的部分,我在搜寻 一些文章 后发现了在某个 issue 中提及了添加批注相关信息,然而还是没有得到具体的解决办法

docx文档底层是由XML文件组成的

我们可以将一个 xx.docx 文件的后缀名改为 .rar 然后将其手动解压,可以得到下面这些文件

在诸多文件当中主要用到的是 document.xml 文件,这里保存了文档的内容

打开一份 document.xml 文件,抛开header、footer、table以及其他特殊项,去掉样式等修饰项,一份朴素的docx文档主要可以分为三个部分:paragraph、run、text

paragraph即段落,就是我们在word当中看到的一段。text即文本,就是真实的内容。run比较抽象,我们可以将其理解为片段,即语句的切分。

为了更好地理解run是什么,打开一篇word文档定位其中一句话

让我们看看这篇文档解压之后的 document.xml 文件中对应的部分

OK,我们可以看到原本完整的一句话在word中被拆分成了许多个 <w:r> 标签,这就是 run ,word切分 run 的规则很多,有的根据标点符号,有的根据中文分词,句子中如果存在不同样式的字词也会单独切分出来,因此我们很难预估一句话究竟会被分成几个片段。

在issue中搜索comment关键字发现在一个 merge request 上已经给出了添加批注的解决方案,可以通过 paragraph 对象上的 add_comment 方法给一个段落添加批注

但这还是不符合我的需求,我的目标是精准添加到某个词或者短语上

打开 这个贡献者的源码 进行研究

其实就是在P标签内插入comment标签引用,同时添加comment标签到xx文件

同理我们可以在r标签内插入comment标签引用,同时添加comment标签到xx文件,这样就能实现给特定词添加批注的需求了

Python处理PDF和Word文档常用的方法

         Python处理PDF和Word文档的模块是PyPDF2,使用之前需要先导入。

打开一个PDF文档的操作顺序是:用open()函数打开文件并用一个变量来接收,然后把变量给传递给PdfFileReader对象,形成一个PdfFileReader对象,这样用PdfFileReader对象下面的各种方法、属性去操作PDF文档。

          PdfFileReader对象常用方法:

(1)、PyPDF2.PdfFileReader()方法:代表一个PdfFileReader对象。

(2)、getPage() 方法:获取FDF文档页数;

(3)、extractText()方法:获取当前PDF文档当前页面的文本内容。

(4)、decrypt()方法:用来给加密的PDF文档接收密码;

 

PdfFileReader对象常用属性:

(1)、pdfReader.numPages 属性:获取当前文档对象总页数。

(2)、 isEncrypted 属性:用于判断PDF文档是否是加密的,如果是加密的,返回True,否则返回False.

例如:

>>> import PyPDF2
>>> pdfFileObj = open(‘meetingminutes.pdf‘, ‘rb‘)
>>> pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
? >>> pdfReader.numPages
19
? >>> pageObj = pdfReader.getPage(0)
? >>> pageObj.extractText()

 

 PdfFileWriter 对象

操作顺序:

1.打开一个或多个已有的 PDF(源 PDF) ,得到 PdfFileReader 对象。
2.创建一个新的 PdfFileWriter 对象。
3.将页面从 PdfFileReader 对象拷贝到 PdfFileWriter 对象中。
4.最后,利用 PdfFileWriter 对象写入输出的 PDF。

 

PdfFileWriter 对象常用方法:

addPage()方法:将源PDF文档页面添加到新的PDF文档里面(复制)。

write()方法:将PdfFileWriter 对象保存的信息写入到变量(文件)中。


例如:

import  PyPDF2
minutesFile=open(‘meetingminutes.pdf‘,‘rb‘)
pdfReader=PyPDF2.PdfFileReader(minutesFile)
page=pdfReader.getPage(0)
print(page.rotateClockwise(90))
pdfWriter=PyPDF2.PdfFileWriter() ###创建一个PdfFileWriter()对象;
pdfWriter.addPage(page) ##把复制的源PDF的page页面添加到新的PdfFileWriter() 对象中;
pdfoutFile=open(‘rotatedPage.pdf‘,‘wb‘) ###打开一个名为“rotatedPage.pdf”的文档(没有则新建),然后用一个pdfoutFile变量来接收它。
pdfWriter.write(pdfoutFile) ####用PdfFileWriter()对象的write方法写入到变量中;
pdfoutFile.close()
minutesFile.close()

 

以上是关于Python Word文档处理 上篇:python-docx的主要内容,如果未能解决你的问题,请参考以下文章

Python处理PDF和Word文档常用的方法

python合并word

python编写一个自动替换word文档文字程序

怎么把python输出为word

python读取word每一行

使用python-docx处理word.docx文件