Python 3.x 如何在python docx中提取随曲目更改插入的文本

Python 3.x 如何在python docx中提取随曲目更改插入的文本,python-3.x,ms-word,python-docx,Python 3.x,Ms Word,Python Docx,我想从以“跟踪更改”模式编辑的word文档中提取文本。我想提取插入的文本并忽略删除的文本 运行下面的代码,我看到在“track changes”模式下插入的段落返回一个空段落 import docx doc = docx.Document('C:\\test track changes.docx') for para in doc.paragraphs: print(para) print(para.text) 是否有办法检索修改后的插入(w:ins元素)中的文本 我使用的

我想从以“跟踪更改”模式编辑的word文档中提取文本。我想提取插入的文本并忽略删除的文本

运行下面的代码,我看到在“track changes”模式下插入的段落返回一个空段落

import docx

doc = docx.Document('C:\\test track changes.docx')

for para in doc.paragraphs:
    print(para)
    print(para.text)
是否有办法检索修改后的插入(w:ins元素)中的文本

我使用的是PythonDocx0.8.6、LXML3.4.0、Python3.4和Win7


感谢您没有直接使用python docx

;对于跟踪的更改/修订,还没有API支持

这是一项相当棘手的工作,如果搜索元素名称,您会发现这一点,首先搜索“openxmlw:ins”,它会显示以下文档作为第一个结果:

如果我需要在紧要关头做类似的事情,我会使用以下方法获得身体元素:

body = document._body._body
然后在上面使用XPath返回我想要的元素,类似于下面的代码:

from docx.text.paragraph import Paragraph

inserted_ps = body.xpath('./w:ins//w:p')
for p in inserted_ps:
    paragraph = Paragraph(p, None)
    print(paragraph.text)
您将自行决定使用什么XPath表达式来获得所需的段落

opc diag
可能是这方面的朋友,允许您快速扫描.docx包的XML

下面的代码对我有用,它直接处理文档的xml(而不是使用python docx)


多年来我一直有同样的问题(也许这个问题一直存在)

通过查看@yiftah发布的“Etiened”代码和
段落的属性
,我找到了在接受更改后检索文本的解决方案

诀窍是获取
p.\u p.xml
以获取段落的xml,然后在该段落上使用“Etiened”代码(即从xml代码中检索所有
元素,其中包含常规运行和
块)

希望它能帮助像我一样迷失的灵魂:

来自docx导入文档
尝试:
从xml.etree.cElementTree导入xml
除恐怖外:
从xml.etree.ElementTree导入xml
WORD_名称空间=”{http://schemas.openxmlformats.org/wordprocessingml/2006/main}"
TEXT=WORD\u名称空间+t
def get_accepted_文本(p):
“”“接受所有更改后返回段落文本”“”
xml=p.\u p.xml
如果xml中的“w:del”或xml中的“w:ins”:
tree=XML(XML)
runs=(树中节点的node.text.getiterator(text)if node.text)
返回“”。加入(运行)
其他:
返回p.text
doc=文档(“Hello.docx”)
对于文件段落中的p:
打印(p.text)
打印(“--”)
打印(获取接受的文本(p))
打印(“=============”)