【发布时间】:2019-05-14 07:39:52
【问题描述】:
我正在遍历链接到 docx、doc 和 pdf 文件的 url 列表。我编写了一个函数,允许我从 docx 文件中提取文本并将其附加到新列表中。我对 pdf 文件不感兴趣,但我也想在同一个函数中从 doc 文件中提取文本。
经过一些研究,似乎大多数人都建议使用textract 来下载 docx 和 doc 文件。但是,我无法在我的设备上正常运行它,并希望找到不同的解决方案。
我尝试将每个 doc 文件转换为 docx,但将其包含在函数中变得很麻烦(对我而言)。
这就是函数现在的样子。它下载所有文件并在列表中提取 docx 文件的文本。否则为“空”。
import os.path
import urllib.request
import os
import requests
import docx2txt
l = []
for link in urls:
link = link.strip()
name = link.rsplit('/', 1)[-1]
filename = os.path.join(name)
quoted_url = urllib.parse.quote(link, safe=":/")
if not os.path.isfile(filename):
print('Downloading: ' + filename)
try:
urllib.request.urlretrieve(quoted_url, filename)
try:
file = docx2txt.process(filename)
file = file.replace('\n', ' ')
file = file.replace('\t', ' ')
l.append(file)
except:
print(' no docx file')
l.append('empty')
except Exception as inst:
print(inst)
print(' Encountered error. Continuing.')
l.append('empty')
预期的输出是从列表中的 doc 和 docx 文件中提取文本,否则为“空”(对于 pdf 或错误链接)。
【问题讨论】:
-
您需要在一个功能中拥有所有功能是否有技术原因?如果没有,我会为每种文件类型建议三个不同的辅助函数。然后,您可以检查主函数调用中的文件扩展名并使用适合文件类型的任何辅助函数
-
不一定。但是,在将文本附加到新列表时,我必须保持链接的顺序。我认为在 python 中必须有一种简单的方法来做到这一点(就像提取 docx 只是一行一样)。您是否有建议以相同的方式有效地从 doc 文件中获取文本并将其附加到列表中?
标签: python docx doc python-docx