利用python将docx文件转为txt

Python015

利用python将docx文件转为txt,第1张

背景:工作中需要将文件夹下的若干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、表格操作。表格也是经常用到的一种对象类型。

pdf格式的文件必须用相应的pdf阅读器才能打开,而且一般的pdf阅读器打开pdf文件后并不支持编辑修改PDF文档的文字。如果可以把把pdf转化为txt文本文件,那么我们阅读编辑起来就容易的多。现在市场上已经有很多PDF转换程序,但是基本上需要付费。但是你只要学会了用Python来进行pdf文件转换为txt文件操作,仅仅只需要短短几行代码就可以搞定

# -*- coding:utf-8 -*-

from win32com import client as wc

import os

key = '文档密码'

def Translate(input, output):

# 转换

wordapp = wc.Dispatch('Word.Application')

try:

doc = wordapp.Documents.Open(input, False, False, False,key)

doc.SaveAs(FileName=output, FileFormat=4, Encoding="gb2312")

doc.Close()

print(input, "完成")

os.remove(input)

# 为了让python可以在后续操作中r方式读取txt和不产生乱码,参数为4

except:

print(input,"密码错误")

if __name__ == '__main__':

#docx文档物理路径

path = r"C:Usersdocx"

key = '文档密码'

j=0

for file in os.listdir(path):

if '.doc' in file:

name = file.split(".docx")[0]

#输入文档物理路径

input_file = r"C:Usersdocx"+""+file

#输出文档物理路径

output_file=r"C:Users xt"+""+name+".txt"

Translate(input_file, output_file)

j=j+1

print(j)

else:continue