用python读取.doc文件

用python读取.doc文件,python,python-2.7,Python,Python 2.7,我得到了一份工作申请的测试,我的任务是阅读一些.doc文件。有人知道图书馆可以这样做吗?我从一个原始python代码开始: f = open('test.doc', 'r') f.read() 但这不会返回一个友好字符串,我需要将其转换为utf-8 编辑:我只想从该文件中获取文本您可以使用库从Microsoft Word文档中读取文本。这是对库的改进,因为它可以从链接、页眉和页脚中提取文本。它甚至可以提取图像 您可以通过运行以下命令进行安装:pip install docx2txt 让我们下载

我得到了一份工作申请的测试,我的任务是阅读一些.doc文件。有人知道图书馆可以这样做吗?我从一个原始python代码开始:

f = open('test.doc', 'r')
f.read()
但这不会返回一个友好字符串,我需要将其转换为utf-8

编辑:我只想从该文件中获取文本

您可以使用库从Microsoft Word文档中读取文本。这是对库的改进,因为它可以从链接、页眉和页脚中提取文本。它甚至可以提取图像

您可以通过运行以下命令进行安装:
pip install docx2txt

让我们下载并阅读第一份Microsoft文档:

以下是终端输出上述代码的屏幕截图:

编辑:

这不适用于.doc文件。我保留这个答案的唯一原因是,似乎有人认为它对.docx文件有用。

可以使用这个库。 它同时处理“doc”和“docx”

您甚至可以使用“antiword”(sudo-apt-get-install-antiword),然后将doc-to-first转换为docx,然后通读

最终,后端的textract使用的是antiword。

先决条件:

安装antiword:
sudo apt get安装antiword

安装docx:
pip安装docx

from subprocess import Popen, PIPE

from docx import opendocx, getdocumenttext
from cStringIO import StringIO
def document_to_text(filename, file_path):
    cmd = ['antiword', file_path]
    p = Popen(cmd, stdout=PIPE)
    stdout, stderr = p.communicate()
    return stdout.decode('ascii', 'ignore')

print document_to_text('your_file_name','your_file_path')

注意–python docx的新版本删除了此函数。确保pip安装docx,而不是新的python docx。同样,我在reading.docx上找到了很多信息,但在.doc上找到的信息要少得多;无论如何,我还是用下面的方法读了这篇文章:

import win32com.client

word = win32com.client.Dispatch("Word.Application")
word.visible = False
wb = word.Documents.Open("myfile.doc")
doc = word.ActiveDocument
print(doc.Range().Text)

我同意希瓦姆的回答,除了windows不存在textract。 并且,由于某种原因,antiword也无法读取“.doc”文件,并给出了一个错误:

'filename.doc' is not a word document. # This happens when the file wasn't generated via MS Office. Eg: Web-pages may be stored in .doc format offline.
因此,我有以下方法来提取文本:

from bs4 import BeautifulSoup as bs
soup = bs(open(filename).read())
[s.extract() for s in soup(['style', 'script'])]
tmpText = soup.get_text()
text = "".join("".join(tmpText.split('\t')).split('\n')).encode('utf-8').strip()
print text
此脚本可用于大多数类型的文件。
玩得开心

来自Shivam Kotwalia的答案非常有效。但是,对象是作为字节导入的。有时,您可能需要它作为字符串来执行REGEX或类似的操作

我推荐以下代码(Shivam Kotwalia回答中的两行):



最后一行将对象文本转换为字符串。

不幸的是,只有.docx文件由docx2txt读取,我只有.doc文件。问题是关于读取.doc文件。这只适用于.docx@billal begueradjyour是对的,它不适用于.doc文件。我保留这个答案的唯一原因是似乎有人认为它对.docx文件有用@Harishmashettythys没有提供问题的答案,只是不是那种格式。@h22谢谢,但是有一些评论可以追溯到1年前,我通过编辑postAntiword来回应他们,它似乎在windows-64位上不起作用,你知道吗?@bones.felipe Yaa!Antiword是一个基于Linux的命令行工具。如果您使用的是Windows 10的周年更新,建议您在Windows[1]上使用Ubuntu上的bash,并在Windows上愉快地使用Unix命令![1] 我来晚了,但安提奥德也来了。还有,但它有DOS版本,不支持长文件名。@yunus-我可能错了,但请在当前支持的部分中查找“doc”,是的,它支持,但。请看一看问题(github本身)。另外,它无法处理早于2003年格式的文档文件(如前一条注释所述),请遵循此处给出的安装说明。在导入模块之前,不要忘记执行“pip安装全文”Upvote。这是唯一一个使用anaconda3的本机解决方案,无需额外安装。纯
.ppt
文件也可以这样做吗?我尝试了
word=win32com.client.Dispatch(“PowerPoint.Application”)
,但出现了一些错误。这是仅限Windows吗?是的,仅限Windows这似乎对我来说效果不太好。它只检索了部分文本,无法读取文件,除非它有一个非常简单的文件路径(例如,文件路径中的破折号似乎会导致问题)。要使此解决方案工作,安装的Word必须能够打开文档。默认情况下,word的新版本不会打开旧文档文件。为了让Word打开它们,请在Word中执行以下操作:
文件
->
选项
->
信任中心
->
信任中心选项
->
文件块设置
,然后取消选中要打开的文件类型。由于未知的文本编码,此操作在我的情况下不起作用。我也用chardet
chardet
尝试了各种方法,但都没有用。请参考此
import win32com.client

word = win32com.client.Dispatch("Word.Application")
word.visible = False
wb = word.Documents.Open("myfile.doc")
doc = word.ActiveDocument
print(doc.Range().Text)
'filename.doc' is not a word document. # This happens when the file wasn't generated via MS Office. Eg: Web-pages may be stored in .doc format offline.
from bs4 import BeautifulSoup as bs
soup = bs(open(filename).read())
[s.extract() for s in soup(['style', 'script'])]
tmpText = soup.get_text()
text = "".join("".join(tmpText.split('\t')).split('\n')).encode('utf-8').strip()
print text
import textract

text = textract.process("path/to/file.extension")
text = text.decode("utf-8")