我正在使用 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-docx
不够复杂,无法知道哪些“容器”元素包含可显示文本,哪些不包含。因此它只报告位于“顶部”级别的段落(和表格)。
这也是修订标记的限制,例如,修订标记有两个或更多文本,其中仅出现一个,具体取决于修订标记设置(显示原始内容、显示编辑后的最新内容等)。
使用
python-docx
解决这个问题的唯一方法是自己导航 XML,尽管 python-docx
中的一些域对象可以很方便,例如 Paragraph
等,一旦您掌握了所需的元素。
我也遇到了同样的问题 要查看文本,您可以尝试
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)