如何用Python从.doc文件中提取纯文本?

3 投票
1 回答
3597 浏览
提问于 2025-04-18 14:13

我想从一个 .doc 文件中提取纯文本(这是微软的旧版文档格式,97-03)。我可以从 .docx 文件中提取纯文本,但 .doc 文件却不行。

我有一段几乎可以用来处理 .doc 文件的代码,代码如下:

        if file.endswith('.doc'):
            app = win32com.client.Dispatch('Word.Application')
            doc = app.Documents.Open(fullpath)
            docText = (doc.Content)
            print docText
            app.Quit()

问题是,每次我运行这段代码时,除了提取到纯文本外,还会出现一个错误,错误信息是这样的:

这是一个测试文件,用来测试代码:

Traceback (most recent call last):
  File "C:\Users\IdaLim\Desktop\MyTestCode\FileIO.py", line 76, in <module> doc =                  

  app.Documents.Open(fullpath) File "C:\Python27\lib\site-
  packages\win32com\client\dynamic.py", line 522, in __getattr__ raise 
  AttributeError("%s.%s"% (self._username_, attr)) AttributeError: Word.Application.Documents

更糟糕的是,如果提取的纯文本中包含像 "!@#$%" 这样的特殊字符,程序就不会输出纯文本,而是会报错,提示说什么不兼容的 Unicode。

你知道有没有什么有效的代码,可以几乎完美地从 .doc 文件中提取纯文本吗?

1 个回答

4

我找到了解决这个问题的办法。

我成功地把 .doc 文件转换成了 .txt 文件,所有的特殊字符和编码都变成了 .txt 格式。下面是相关的代码。我想如果你需要的话,可以读取新创建的文本文件,然后把内容存储到你的 Python 程序的变量里。接下来你就可以对这些数据进行任何你想做的操作。

import win32com.client 
import os
import re
rootdir ='C:\Users\IdaLim\Desktop\docs'     
try:
    app = win32com.client.Dispatch('Word.Application')
    app.Visible = True
    for subdir, dirs, files in os.walk(rootdir):
        for file in files:
            fullpath = os.path.join(*[subdir, file])
            if file.endswith(".doc"):
                out_name = file.replace("doc", r"txt")
                in_file = os.path.abspath(rootdir + "\\" + file)
                out_file = os.path.abspath(rootdir + "\\" + out_name)
                doc = app.Documents.Open(in_file)
                content = doc.Content.Text
                print 'Exporting', out_file
                doc.SaveAs(out_file, FileFormat=7)
                doc.Close()
except Exception, e:
    print e
finally:
    app.Quit()

撰写回答