我得到了求职申请,我的交易是读了一些.doc文件。有谁知道图书馆这样做?我开始使用原始python代码:
f = open('test.doc', 'r')
f.read()
但这不会返回我需要将其转换为utf-8
的友好字符串编辑:我只想获取此文件中的文字
答案 0 :(得分:16)
可以使用textract库。 它会照顾" doc"以及" docx"
import textract
text = textract.process("path/to/file.extension")
你甚至可以使用' antiword' (sudo apt-get install antiword)然后将doc转换为docx,然后通过docx2txt阅读。
antiword filename.doc > filename.docx
最终,后端的textract正在使用反词。
答案 1 :(得分:11)
您可以使用python-docx2txt库从Microsoft Word文档中读取文本。这是对python-docx库的改进,因为它可以从链接,页眉和页脚中提取文本。它甚至可以提取图像。
您可以通过运行pip install docx2txt
安装它。
让我们下载并阅读here上的第一个Microsoft文档:
import docx2txt
my_text = docx2txt.process("test.docx")
print(my_text)
以下是终端输出上面代码的截图:
修改强>
NOT 对 .doc 文件有效。我保留这个答案的唯一原因是,似乎有人发现它对 .docx 文件很有用。
答案 2 :(得分:6)
我试图这样做,我发现了很多关于阅读.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)
答案 3 :(得分:1)
先决条件:
安装反词:sudo apt-get install antiword
安装docx:pip install 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 install docx而不是新的python-docx
答案 4 :(得分:1)
Shivam Kotwalia的回答非常有效。但是,对象是作为 byte 类型导入的。有时您可能需要它作为执行REGEX或类似功能的字符串。
我推荐以下代码(Shivam Kotwalia的回答两行):
<!DOCTYPE html>
<html>
<head>
<meta charset = "utf-8">
<title>Increment Button</title>
</head>
<body>
<button onclick="IncrementScore()"> Increment</button>
<script>
var score = 0;
function IncrementScore()
{
score++;
}
console.log(score);
</script>
</body>
</html>
最后一行将对象 text 转换为 string 。
答案 5 :(得分:0)
除了Windows中不存在 textract 之外,我同意Shivam的回答。 并且,由于某些原因,反字词也无法读取'.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
此脚本将适用于大多数文件。 玩得开心!
答案 6 :(得分:0)
我不得不用同样的方法在大量 *.doc 文件中搜索特定数字并得出:
special_chars = {
"b'\\t'": '\t',
"b'\\r'": '\n',
"b'\\x07'": '|',
"b'\\xc4'": 'Ä',
"b'\\xe4'": 'ä',
"b'\\xdc'": 'Ü',
"b'\\xfc'": 'ü',
"b'\\xd6'": 'Ö',
"b'\\xf6'": 'ö',
"b'\\xdf'": 'ß',
"b'\\xa7'": '§',
"b'\\xb0'": '°',
"b'\\x82'": '‚',
"b'\\x84'": '„',
"b'\\x91'": '‘',
"b'\\x93'": '“',
"b'\\x96'": '-',
"b'\\xb4'": '´'
}
def get_string(path):
string = ''
with open(path, 'rb') as stream:
stream.seek(2560) # Offset - text starts after byte 2560
current_stream = stream.read(1)
while not (str(current_stream) == "b'\\xfa'"):
if str(current_stream) in special_chars.keys():
string += special_chars[str(current_stream)]
else:
try:
char = current_stream.decode('UTF-8')
if char.isalnum():
string += char
except UnicodeDecodeError:
string += ''
current_stream = stream.read(1)
return string
我不确定这个解决方案有多“干净”,但它适用于正则表达式。
答案 7 :(得分:0)
我一直在寻找解决方案。 .doc
文件资料不够,最后我把.doc
类型改成.docx
from win32com import client as wc
w = wc.Dispatch('Word.Application')
# Or use the following method to start a separate process:
# w = wc.DispatchEx('Word.Application')
doc=w.Documents.Open(os.path.abspath('test.doc'))
doc.SaveAs("test_docx.docx",16)