如何使用python-docx从现有docx文件中提取文本

89 投票
6 回答
224337 浏览
提问于 2025-04-18 16:44

我正在尝试使用 python-docx 模块(可以通过 pip install python-docx 安装),但感觉有点困惑。在 这个GitHub仓库 的测试示例中,他们使用了 opendocx 函数,而在 这个文档网站 上,他们使用的是 Document 类。虽然他们只是展示了如何向docx文件添加文本,而不是读取已有的文件?

第一个(opendocx)似乎不工作,可能已经不再使用了。对于第二种情况,我试着使用:

from docx import Document

document = Document('test_doc.docx')
print(document.paragraphs)

结果返回了一个 <docx.text.Paragraph object at 0x... > 的列表。

然后我做了:

for p in document.paragraphs:
    print(p.text)

结果返回了所有文本,但有一些内容缺失。所有的链接(按住CTRL并点击可以访问链接)在控制台的文本中没有出现。

这是什么问题?为什么链接会缺失?

我怎么才能获取完整的文本,而不需要一个个循环(像 open().read() 那样)?

6 个回答

7

使用python-docx,就像@Chinmoy Panda的回答所示:

for para in doc.paragraphs:
    fullText.append(para.text)

不过,para.text 会丢失在 w:smarttag 中的文本(相关的GitHub问题在这里:https://github.com/python-openxml/python-docx/issues/328),你应该使用下面的函数:

def para2text(p):
    rs = p._element.xpath('.//w:t')
    return u" ".join([r.text for r in rs])
8

python-docx有两个“版本”。最初的版本是0.2.x,之后的新版本从0.3.0开始。新版本是对旧版本的全面重写,采用了面向对象的设计。你可以在这里找到它的独立代码库

opendocx()这个函数属于旧版的API。这里的文档是针对新版本的。旧版本几乎没有什么文档可供参考。

当前版本不支持读取或写入超链接。这项功能在开发计划中,项目正在积极开发中。由于Word有很多功能,所以这个API的范围相当广泛。我们会在将来处理这个问题,但可能在下个月之前不会实现,除非有人专注于这个方面并进行贡献。 更新 超链接支持在这个回答之后被添加进来了。

18

不安装 python-docx 的方法

docx 文件其实就是一个压缩包,里面有好几个文件夹和文件。下面的链接里有一个简单的函数,可以从 docx 文件中提取文本,而不需要依赖 python-docxlxml,后者有时候安装起来比较麻烦:

http://etienned.github.io/posts/extract-text-from-word-docx-simply/

27

你可以使用 python-docx2txt 这个工具,它是从 python-docx 改编而来的,不仅可以提取文档中的文字,还能提取链接、标题和页脚的内容。它还可以提取图片。

76

你可以试试这个

import docx

def getText(filename):
    doc = docx.Document(filename)
    fullText = []
    for para in doc.paragraphs:
        fullText.append(para.text)
    return '\n'.join(fullText)

撰写回答