前言
前面的文章中,我们有介绍过
Python-docx
这个第三方包,基于它开发的
docx-tpl
对于根据模板批量生成文件有相当方便的地方,甚至我们还利用它开发了一个简单的模拟邮件合并的小程序。
然而,不得不让人遗憾的是,目前在
Python
的第三方包中,我还没有发现能直接对
doc
文档进行读取的包,但由于历史原因,在工作中,曾产生过大量的
doc
文档,且其中有一些还存储着一些表格,如何将这些
doc
文档中的表格提取出来,就是一个非常麻烦的事,如果只是一个文档还可以手工操作,但面对几百上千的
doc
文档,根本无法用手工去一一完成。
间接读取doc
文档的思路
在查询了相当多的资料后,发现一个可靠的办法是将
doc
文件转换为
docx
文档,然后用
Python-docx
进行读取,通常我们会用
office
软件打开
doc
文件再另存为
docx
文件,其于这个思路也有一些批量转换工具,不过,如果安装了
libreoffice
这个软件的话,可以直接在命令行调用它来执行转换命令。
下面我们来测试一下用
libreoffice
的命令行工具转换一个测试文档,文档截图如下:
因为要用
libreoffice
进行转换,所以我们先来测试一下
libreoffice
是否安装成功:
从上图可知,目前我这台电脑上安装的
libreoffice
版本是
6.4.6.2
,不过最新的
libreoffice
已经是
7.0.4
版本,界面更加美观。
关于
libreoffice
这里不再多说,同学们只须知道它也是一个类似于
MSOffice
的软件即可,如果想了解多一些,可以直接在它的官方网站上查阅更多信息。
用
libreoffice
将
doc
文件转换为
docx
文件的代码如下:
当命令运行结束时,我们会发现在原文件的当前目录下产生了一个同名的
docx
文件,如下图所示:
打开该
docx
文件,可以看到转换结果:
对比原文档图,可以看出,生成的新的
docx
文档在页面排版方面有一些变化,但内容看起来没有改变。
下面我们来读取该
docx
文档。
读取同名docx
文档
用
Python-docx
读取
docx
文档中的表格代码如下:
从上述代码可以看出,在生成的新文档中有两个表格,这与我们的文档一致,要读取其中的内容,代码如下:
将上述代码转换成一个函数,专门来读取当前文档所有的表格,并将其转换成
Pandas
的
DataFrame
对象:
将转换后的文件表格中数据读取出来,一共有29条记录,这与我们的原文件是相吻合的。
Python调用命令行
如果用
Python
来调用
libreoffice
的命令行,只需要用
os
模块中的
system
即可:
至此,读取
doc
文件中的表格问题就解决了。
需要注意:在我所读取的
doc
文件中,表格的标题列是有
序号字样,如果读者朋友的表格中不具备该字样,还应根据实际情况修改程序。
小结
本文对如何读取
doc
文件的表格数据进行了研究,并将其功能写成一个函数来输出
Pandas
的
DataFrame
对象。从实现的方法来说,有“曲线救国”的意图——毕竟还是要借助于
libreoffice
的转换功能才能完成,但从解决问题的角度来看,这是一个值得推荐的方法。