Python批量处理.doc文件:利用Win32 COM转为.docx并读写
Java读写.doc文件常遇乱码且POI库对新版Word支持有限。本文介绍利用Python结合win32com组件,通过“另存为”机制将大量.doc文件批量转换为.docx格式,进而使用python-docx库进行高效读写,解决了编码与兼容性问题。
前言:
Java语言在处理.doc文件时遇到的乱码问题:
在使用Java语言读写.doc文件时,无论是通过流将内容输出到控制台,还是写入其他文件,无论采用何种编码格式(如utf-8、gbk等),最终显示的内容99%会出现乱码。
Java语言读写.doc文件出现乱码的原因分析:
.doc是微软开发的办公软件之一。若Word文档仅使用utf-8字体格式,采用对应编码读写可正确输出汉字;但一旦文档中涉及字体尺寸、颜色或特定样式(style)等格式变更,文档结构即不再符合纯utf-8编码特征,因此使用utf-8格式输出时99%会显示为乱码。
利用Java语言避免.doc文档乱码的解决方案:(Sun公司与微软公司的博弈)
可以使用Sun公司开发的POI包,该包提供了操作微软办公软件的接口,利用POI读写.doc文件通常可避免乱码。但若因此认为Java已能完美处理.doc文件,则可能过于乐观。据我所知,截至2017年12月22日,POI包最新版本为3.1.7版。该版本仅支持处理微软2007版本的Word、Excel和PPT等,意味着POI 3.1.7版本的jar包不支持处理当时较新的Word 2016。因此,可以说使用Java读写Word 2016文件较为困难。虽然可尝试其他接口,但效率通常不及POI。官网曾显示POI最新版本计划于2017年12月推出,但截至该日期,我尚未在官网找到该jar包。
正文:
Python在文档处理方面比Java更具优势,尤其在结合正则表达式进行自然语言处理时表现强势。近期在进行深度学习项目时,需要解析并处理数百个.doc文件。众所周知,Python读写.txt文档通常畅通无阻,无论中文格式如何;Python读写.docx文档也较为顺畅,只需在命令行安装python-docx(0.8.6)即可实现读写,具体方案如下。
问题:Python无法直接读取.doc文件(而非.docx文件)
解决方案:利用Python将大批量.doc文件转换为.docx文件,随后读写.docx文件
问题分析:Python利用python-docx(0.8.6)库可以顺畅读取.docx或.txt文件,但对原生.doc文件无能为力。部分同学可能尝试手动将.doc后缀改为.docx或.txt,但这会导致文件损坏,无法打开或显示乱码。Python无法直接操作.doc文件是其先天不足,虽然网络上鲜有直接读取.doc文件的源码方案,但通过手动“另存为”功能可将.doc文档成功转换为可打开的.docx文档。基于此思路,尝试通过代码实现这一“另存为”功能,从而解决问题。
直接提供Python代码(首先需安装pypewin32库):
# -*- coding: utf-8 -*-: import sys import pickle import re import codecs import string import shutil from win32com import client as wc
def doSaveAas(): # 想批处理文件,你就用for循环呗,我一次性处理了100多个文件,代码执行不超过2分钟,可以解决问题,目标文件路径可以自由改动,大家注意SaveAs方法中的参数,好多啊,别写错了
word = wc.Dispatch('Word.Application')
doc = word.Documents.Open(u'C:\\Users\\X\\PycharmProjects\\1\\大家好.doc') # 目标路径下的文件
doc.SaveAs(u'C:\\Users\\X\\PycharmProjects\\1\\我是一枚小小的程序员X007.docx', 12, False, "", True, "", False, False, False, False) # 转化后路径下的文件
doc.Close()
word.Quit()
转化为.docx文件后,处理.docx文件即可一路畅通,网上相关解决方案众多,此处不再赘述。如有问题,欢迎留言交流。
以上这篇解决Python大批量读写.doc文件的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













