【问题标题】:Scraping text from doc and docx files in one function在一个函数中从 doc 和 docx 文件中抓取文本
【发布时间】: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


【解决方案1】:

以下代码读取.doc文件:

import win32com.client

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

在您的代码中,首先检查文件扩展名,如果是 .docx. 然后运行您的代码然后运行 ​​elif 它是 .doc 然后运行上面的代码和 pass 如果它是 .pdf

【讨论】:

  • 谢谢@Rahul。如果我没记错的话,这仅适用于 Windows,对吧?我在 macOS Mojave 上工作。
  • 在这种情况下,只需修改您的方法,如果您看到扩展名为.doc,则将其更改为.docx,如果不是简单地做您所做的事情
  • 您是否建议将它们在 python 中转换为 docx 并覆盖旧保存的文件,或者通过添加“x”来简单地更改字符串的扩展名?这可能行得通吗?
  • 第一个...使用python将.doc转换为.docx并删除.doc文件
猜你喜欢
  • 2011-07-29
  • 1970-01-01
  • 2011-08-06
  • 2017-09-17
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
  • 2021-09-01
相关资源
最近更新 更多