求助:Python读取多个.doc和.docx文件,.doc文件读取遇阻
针对Windows下提取.doc文件纯文本的可行方案
我之前在Windows环境下处理.doc文件文本提取时,也遇到过和你一模一样的困境——docx2txt对.doc完全无效,textract又各种跑不起来。不过试了几个方案后,找到两个非常靠谱的纯文本提取方法,完全满足你的需求:
方案1:利用pywin32(依赖Microsoft Word)
这是最稳定的方案之一,因为它直接调用Windows系统里的Word来解析文档,只要你的系统装了Word(大部分Windows办公电脑都有),就能顺利运行。
步骤:
- 先安装pywin32包:
pip install pywin32
- 提取文本的代码示例:
import win32com.client as win32 from pathlib import Path def extract_doc_text(doc_path): # 初始化Word应用,设置后台运行不显示窗口 word = win32.gencache.EnsureDispatch('Word.Application') word.Visible = False try: doc = word.Documents.Open(str(Path(doc_path).resolve())) # 提取纯文本 text = doc.Content.Text doc.Close() return text.strip() except Exception as e: print(f"处理文件{doc_path}时出错: {str(e)}") return "" finally: # 确保Word进程退出 word.Quit() # 使用示例 doc_text = extract_doc_text("你的文件路径/示例.doc") print(doc_text)
注意:如果你的Word是较新版本,可能需要先运行一次Word并完成初始化设置,避免脚本调用时弹出配置窗口。
方案2:使用Antiword(无需依赖Word)
如果你不想依赖Word,Antiword是一个开源的命令行工具,专门用来提取.doc文件的纯文本,Windows版本完全可用。
步骤:
下载Windows版Antiword:
你可以找到Antiword的Windows预编译包,解压到你电脑的某个路径(比如C:\antiword),并把这个路径添加到系统环境变量的PATH里,方便直接调用。用Python调用Antiword提取文本:
import subprocess from pathlib import Path def extract_doc_text_antiword(doc_path): try: # 调用antiword命令提取文本 result = subprocess.run( ["antiword", str(Path(doc_path).resolve())], capture_output=True, text=True, check=True ) return result.stdout.strip() except subprocess.CalledProcessError as e: print(f"提取失败: {e.stderr}") return "" except FileNotFoundError: print("未找到antiword,请确保它已添加到系统PATH中") return "" # 使用示例 doc_text = extract_doc_text_antiword("你的文件路径/示例.doc") print(doc_text)
这个方案的好处是轻量,不需要安装庞大的Office套件,适合没有Word的环境。
总结
如果你有Word环境,优先选方案1,兼容性最好;如果不想依赖Word,方案2是完美替代。两个方案都只提取纯文本,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Alex Horrillo




