使用 python-docx 时缺少文档文本

问题描述 投票:0回答:2

我正在使用 python-docx 0.8.6 和 python 3.6 来执行简单的搜索/替换操作。

我遇到一个问题,即在迭代 doc.paragraphs 时并未显示所有文档文本

对于调试我已经尝试过

doc = Document(input_file)
fullText = []
for para in doc.paragraphs:
    fullText.append(para.text)
print('\n'.join(fullText))

这似乎只打印出文件内容的大约一半。

文件中没有表格或特殊格式。有什么原因导致 python-docx 无法读取文档的大部分内容吗?

编辑:丢失的文本包含在邮件合并字段中(如果有任何区别)

python python-3.x python-docx
2个回答
3
投票

邮件合并字段确实有所作为。不幸的是,

python-docx
不够复杂,无法知道哪些“容器”元素包含可显示文本,哪些不包含。因此它只报告位于“顶部”级别的段落(和表格)。

这也是修订标记的限制,例如,修订标记有两个或更多文本,其中仅出现一个,具体取决于修订标记设置(显示原始内容、显示编辑后的最新内容等)。

使用

python-docx
解决这个问题的唯一方法是自己导航 XML,尽管
python-docx
中的一些域对象可以很方便,例如
Paragraph
等,一旦您掌握了所需的元素。


0
投票

我也遇到了同样的问题 要查看文本,您可以尝试

paragraph._p.xml
这将为您提供文本应在的 xml 内容

你可以用

BeautifulSoup
来解析它:

from bs4 import BeautifulSoup
soup = BeautifulSoup(paragraph._p.xml)
soup.find_all("w:p")

这会给你一个类似这样的列表

<w:p>
<w:r>
<w:t>9.3. Some text...</w:t>
</w:r>
</w:p>

比你能做的

for el in soup.find_all("w:p"):
    print(el.text)
© www.soinside.com 2019 - 2024. All rights reserved.