美文网首页
利用python将docx文件转为txt

利用python将docx文件转为txt

作者: 凌烟阁主5221 | 来源:发表于2019-04-17 14:12 被阅读0次

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

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

    转换docx文件

    需要的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

    import docx

    from docx import Document

    path = "C:\\Users\\Administrator\\Desktop\\word.docx"

    document = Document(path)

    for paragraph in document.paragraphs:

        print(paragraph.text)

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

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

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

    转换doc文件

    对于要转换的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

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


    docx模块使用

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

    #coding:utf-8

    import docx 

    doc_new = docx.Document() #新建文档

    doc = docx.Document(ur'C:\1.docx')#读取文档

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

    doc.save(path_or_stream)

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

    doc.paragraphs#段落集合

    doc.tables#表格集合

    doc.sections#节  集合

    doc.styles#样式集合

    doc.inline_shapes#内置图形 等等...

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

    doc.add_paragraph(u'第一段',style=None)#插入一个段落,文本为“第一段”#默认是不应用样式,这里也可以不写style参数,或者指定一个段落样式

    doc.add_paragraph(u'第二段',style='Heading 2')#这些样式都是word默认带有的样式,可以直接罗列出来有哪些段落样式

    print[s.nameforsindoc.stylesifs.type==1]

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

    #coding:utf-8

    from docx import Document

    from docx.shared import RGBColor#这个是docx的颜色类

    doc = Document()#新建文档

    style = doc.styles.add_style('style name 1',2)#新增样式(第一个参数是样式名称,第二个参数是样式类型:1代表段落;2代表字符;3代表表格)

    style.font.color.rgb = RGBColor(0x0,0x0,0xff)#设置具体样式(修改样式字体为蓝色,当然还可以修改其他的,大家自己尝试)

    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、表格操作。表格也是经常用到的一种对象类型。

    #新建一个2x3的表格,style可以不写

    table=doc.add_table(rows=2,cols=3,style=None)#可以用table 的rows和columns得到这个表格的行数和列数

    printlen(table.rows)

    printlen(table.columns)#遍历表格

    for row in table.rows:

        row.cells[0].text ='1'#

        print row.cells[0].text#新增行或列

        table.add_row()

        table.add_column()

    相关文章

      网友评论

          本文标题:利用python将docx文件转为txt

          本文链接:https://www.haomeiwen.com/subject/fxggwqtx.html