python - 如何识别 docx 文件中的分页符,并在每个页面中创建文本列表
python - how to identify page breaks within a docx file, and create list of text within each page
我有以下代码来拆分 docx 文件的每个段落并附加到列表,但我需要识别 xml 树结构中的分页符并为每个页面创建一个文本列表.如果有帮助,很乐意提供确切的命名空间:
xml_content = document.read('word/document.xml')
tree = XML(xml_content)
aggText = []
#tree.getiterator method looks at previously defined word namespaces
for paragraph in tree.getiterator(PARA):
texts = [node.text
for node in paragraph.getiterator(TEXT)
if node.text]
if texts:
aggText.append(''.join(texts))
我想象更新后的循环看起来像下面这样,但不确定在 xml 树结构中定位分页符:
aggText = []
for paragraph in tree.getiterator(PARA):
texts = [node.text
for node in paragraph.getiterator(TEXT)
if node.text]
#page breaks in xml read 'w:lastRenderedPageBreak'
#below doesn't work, need a way to search raw xml for the page break identifier
if texts.count(lastRenderedPageBreak) > 0:
pages = aggText.append(''.join(texts))
texts = []
如有任何想法,我们将不胜感激!
在 Mac.
上用 MS Word 2011 创建了一个 Word 文档
Word文档另存为WordXML文档共4页,每页内容如下:
- 第 1 页
- 第 2 页
- [故意留空]
- 第 4 页
相关的xml如下:
<w:t>Page1</w:t></w:r></w:p><w:p w14:paraId="7DC7FC1F" w14:textId="77777777" w:rsidR="00147F82" w:rsidRDefault="00147F82"><w:r><w:br w:type="page"/></w:r></w:p><w:p w14:paraId="7C202865" w14:textId="77777777" w:rsidR="00E3126A" w:rsidRDefault="00147F82"><w:r><w:lastRenderedPageBreak/><w:t>Page2</w:t></w:r></w:p><w:p w14:paraId="78BAA3B3" w14:textId="77777777" w:rsidR="00E3126A" w:rsidRDefault="00E3126A"><w:r><w:br w:type="page"/></w:r></w:p><w:p w14:paraId="2B26F15B" w14:textId="77777777" w:rsidR="00E3126A" w:rsidRDefault="00E3126A"><w:r><w:br w:type="page"/></w:r></w:p><w:p w14:paraId="1005F61F" w14:textId="77777777" w:rsidR="00C66DE3" w:rsidRDefault="00E3126A"><w:r><w:t>Page4</w:t>
每页之间有一个 <w:br w:type="page"/></w:r>
标记。
解决方案如下,我也更新了迭代器函数,因为 getiterator() 现在已被弃用。
NAMESPACE =
'{http://schemas.openxmlformats.org/wordprocessingml/2006/main}'
pages = []
PARA = NAMESPACE + 'p'
TEXT = NAMESPACE + 't'
PAGE = NAMESPACE + 'lastRenderedPageBreak'
aggText = ''
for paragraph in tree.iter(PARA):
aggText += ''.join([node.text
for node in paragraph.iter(TEXT)
if node.text])
if aggText and [node for node in paragraph.iter(PAGE):
pages.append(aggText)
aggText = ''
if aggText != '':
pages.append(aggText)
我有以下代码来拆分 docx 文件的每个段落并附加到列表,但我需要识别 xml 树结构中的分页符并为每个页面创建一个文本列表.如果有帮助,很乐意提供确切的命名空间:
xml_content = document.read('word/document.xml')
tree = XML(xml_content)
aggText = []
#tree.getiterator method looks at previously defined word namespaces
for paragraph in tree.getiterator(PARA):
texts = [node.text
for node in paragraph.getiterator(TEXT)
if node.text]
if texts:
aggText.append(''.join(texts))
我想象更新后的循环看起来像下面这样,但不确定在 xml 树结构中定位分页符:
aggText = []
for paragraph in tree.getiterator(PARA):
texts = [node.text
for node in paragraph.getiterator(TEXT)
if node.text]
#page breaks in xml read 'w:lastRenderedPageBreak'
#below doesn't work, need a way to search raw xml for the page break identifier
if texts.count(lastRenderedPageBreak) > 0:
pages = aggText.append(''.join(texts))
texts = []
如有任何想法,我们将不胜感激!
在 Mac.
上用 MS Word 2011 创建了一个 Word 文档Word文档另存为WordXML文档共4页,每页内容如下:
- 第 1 页
- 第 2 页
- [故意留空]
- 第 4 页
相关的xml如下:
<w:t>Page1</w:t></w:r></w:p><w:p w14:paraId="7DC7FC1F" w14:textId="77777777" w:rsidR="00147F82" w:rsidRDefault="00147F82"><w:r><w:br w:type="page"/></w:r></w:p><w:p w14:paraId="7C202865" w14:textId="77777777" w:rsidR="00E3126A" w:rsidRDefault="00147F82"><w:r><w:lastRenderedPageBreak/><w:t>Page2</w:t></w:r></w:p><w:p w14:paraId="78BAA3B3" w14:textId="77777777" w:rsidR="00E3126A" w:rsidRDefault="00E3126A"><w:r><w:br w:type="page"/></w:r></w:p><w:p w14:paraId="2B26F15B" w14:textId="77777777" w:rsidR="00E3126A" w:rsidRDefault="00E3126A"><w:r><w:br w:type="page"/></w:r></w:p><w:p w14:paraId="1005F61F" w14:textId="77777777" w:rsidR="00C66DE3" w:rsidRDefault="00E3126A"><w:r><w:t>Page4</w:t>
每页之间有一个 <w:br w:type="page"/></w:r>
标记。
解决方案如下,我也更新了迭代器函数,因为 getiterator() 现在已被弃用。
NAMESPACE =
'{http://schemas.openxmlformats.org/wordprocessingml/2006/main}'
pages = []
PARA = NAMESPACE + 'p'
TEXT = NAMESPACE + 't'
PAGE = NAMESPACE + 'lastRenderedPageBreak'
aggText = ''
for paragraph in tree.iter(PARA):
aggText += ''.join([node.text
for node in paragraph.iter(TEXT)
if node.text])
if aggText and [node for node in paragraph.iter(PAGE):
pages.append(aggText)
aggText = ''
if aggText != '':
pages.append(aggText)