利用python将docx文件转为txt

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用python将docx文件转为txt相关的知识,希望对你有一定的参考价值。

参考技术A 背景:工作中需要将文件夹下的若干word文件docx转换为对应txt文本格式

因此需要将docx中文本读取出来,然后保存为txt格式即可

需要的python模块为 python-docx : https://python-docx.readthedocs.io/en/latest/index.html, 导入模块时候导入docx

(只能读取.docx文件,不能读取.doc文件)

注意,在PyPi里还有一个叫docx的库,已经停止更新,不建议使用)

http://www.cnblogs.com/geek-arking/p/9300617.html

上面的方法只能读取docx文件,如果读取doc会报错

结果报错:docx.opc.exceptions.PackageNotFoundError: Package not found。还是无法识别doc

“改变拓展名并没有改变其编码方式,因此无法读取文本内容,需将doc文件用word另存为docx后再用python-docx读取其内容”

对于要转换的doc文件,网上的资料都是使用win32,需要安装 pypiwin32

https://www.cnblogs.com/AlgorithmDot/p/3386918.html

通过上面的方法,有时可以直接将doc转换为txt文件,有时候会报错。

这里我们可以考虑将doc文件直接转换为docx然后再通过上面的方法读取为txt,如果手动将doc修改为txt或者docx,打开文件会显示乱码,但是可以用其提供的SaveAs方法将.doc文档利用手动的方式“另存为”.docx文档,就能够成功打开转化后的.docx文档,

doc.SaveAs(tmp +'.docx', 16)

其中16的含义如下:

利用win32com接口直接调用office API,好处是简单、兼容性好,只要office能处理的,python都可以处理,处理出来的结果和office word里面“另存为”一致。

下面是office 2007支持的全部文件格式对应表:

wdFormatDocument = 0 

wdFormatDocument97 = 0 

wdFormatDocumentDefault = 16 

wdFormatDOSText = 4 

wdFormatDOSTextLineBreaks = 5 

wdFormatEncodedText = 7 

wdFormatFilteredHTML = 10 

wdFormatFlatXML = 19 

wdFormatFlatXMLMacroEnabled = 20 

wdFormatFlatXMLTemplate = 21 

wdFormatFlatXMLTemplateMacroEnabled = 22 

wdFormatHTML = 8 

wdFormatPDF = 17 

wdFormatRTF = 6 

wdFormatTemplate = 1 

wdFormatTemplate97 = 1 

wdFormatText = 2 

wdFormatTextLineBreaks = 3 

wdFormatUnicodeText = 7 

wdFormatWebArchive = 9 

wdFormatXML = 11 

wdFormatXMLDocument = 12 

wdFormatXMLDocumentMacroEnabled = 13 

wdFormatXMLTemplate = 14 

wdFormatXMLTemplateMacroEnabled = 15 

wdFormatXPS = 18

照着字面意思应该能对应到相应的文件格式。

1、新建或打开文件。这个比较简单用docx的Document类,若指定路径则是打开文档;若没有指定路径则是新建文档

2、保存文件。有打开,就有保存。用Document类的save方法,其中参数是保存的文件路径,或者要保存的文件流。一般指定路径即可。

doc.save(path_or_stream)

3、对象集合。python-docx包含了word文档的相关对象集合。

4、插入段落。段落是word最基本的对象之一。

5、新增样式。这个帮助文档里面说得不仔细,而且还是英文的。我手头上的项目用到这个,就自己琢磨出怎么使用,如下。

6、应用字符样式。字符自然是在段落里面的,可以采用下面方法给段落追加文字和设置字符样式。

#插入一个空白段落

p = doc.add_paragraph('')

p.add_run('123', style="Heading 1 Char")

p.add_run('456')

p.add_run('789', style="Heading 2 Char")

#这样一个段落就应用了两个字符样式,中间“456”就没应用样式

printp.text#输出结果是u'123456789' 也还是连续的

7、设置字体。当然可以不用通过设置样式对某些字进行设置,也可以直接设置。

p = doc.add_paragraph('')

r = p.add_run('123')

r.font.bold =True#加粗

r.font.italic =True#倾斜 等等...

8、表格操作。表格也是经常用到的一种对象类型。

通过将文件(即 docx、xlsx、txt)发送到“Microsoft XPS Document Writer”打印机,以编程方式将文件(即 docx、xlsx、txt)转换(保存)为 XPS

【中文标题】通过将文件(即 docx、xlsx、txt)发送到“Microsoft XPS Document Writer”打印机,以编程方式将文件(即 docx、xlsx、txt)转换(保存)为 XPS【英文标题】:Programmatically convert (save) files (i.e. docx, xlsx, txt) to XPS by sending them to the “Microsoft XPS Document Writer” printer 【发布时间】:2011-11-27 21:13:01 【问题描述】:

使用 C# 3.5,我尝试通过将 XPS 文件发送到“Microsoft XPS Document Writer”打印机以编程方式创建它们。我可以设置打印队列,但我无法使用 PrintQueue.AddJob() 将作业添加到打印队列,因为它需要一个 XPS 文件。我也尝试将 PrintSystemInfo JobStream 设置为字节数组,但无济于事。

基本上我想模仿用户在打印到“Microsoft XPS Document Writer”时的手动操作: 1. 从打印机列表中选择“Microsoft XPS Document Writer”。 2. 指定新的 XPS 文件名。 3. 打印(将其保存为 .xps 文件)

我认为使用 System.Printing 和 System.Windows.Xps 命名空间会有一种简单的方法来做到这一点。我花了很多时间对此进行研究,并看到其他人试图完成相同的任务,但没有人能够提供一个优雅的解决方案。

任何见解将不胜感激。

谢谢。

【问题讨论】:

【参考方案1】:

您应该寻找的是如何让知道如何读取这些文件的应用程序打印它们。我的意思是,Excel 可以渲染 xslt,所以您应该让 Excel 将其打印到 XPS 编写器(可能通过 COM)。

System.Windows.Xps 命名空间如果知道如何读取和呈现文档会有所帮助 - 然后您对类似于 https://***.com/a/352551/332528 的 XpsDocuments 方法进行相应调用,将您的文档呈现到 xps 和然后打印出来。

【讨论】:

以上是关于利用python将docx文件转为txt的主要内容,如果未能解决你的问题,请参考以下文章

如何将*.doc批量转换成*.docx

Python实现pdf转word

如何把doc批量转化为docx?

使用Python操纵具有链接和跟踪更改的Microsoft Word DOCX文件

python怎么实现文件格式的转换

利用Python-docx 读写 Word 文档中的正文表格段落字体等