You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

求助:Python读取多个.doc和.docx文件,.doc文件读取遇阻

针对Windows下提取.doc文件纯文本的可行方案

我之前在Windows环境下处理.doc文件文本提取时,也遇到过和你一模一样的困境——docx2txt对.doc完全无效,textract又各种跑不起来。不过试了几个方案后,找到两个非常靠谱的纯文本提取方法,完全满足你的需求:

方案1:利用pywin32(依赖Microsoft Word)

这是最稳定的方案之一,因为它直接调用Windows系统里的Word来解析文档,只要你的系统装了Word(大部分Windows办公电脑都有),就能顺利运行。

步骤:

  1. 先安装pywin32包:
pip install pywin32
  1. 提取文本的代码示例:
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版本完全可用。

步骤:

  1. 下载Windows版Antiword:
    你可以找到Antiword的Windows预编译包,解压到你电脑的某个路径(比如C:\antiword),并把这个路径添加到系统环境变量的PATH里,方便直接调用。

  2. 用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

火山引擎 最新活动