python - 如何使用 python-docx 从 docx 识别分页符

标签 python parsing docx page-break python-docx

我有几个 .docx 文件,其中包含许多类似的文本 block :docx 文件包含 300 多篇新闻稿,每篇 1-2 页,需要分成单独的文本文件。区分文章之间唯一一致的方法是,两篇文章之间总是且只有一个分页符。

但是,我不知道如何在将包含的Word文档转换为文本时找到分页符,并且使用我当前的脚本转换后分页符信息丢失

我想知道在将 .docx 文件转换为 .txt 时如何保留硬分页符。对我来说,它们在文本文件中的样子并不重要,只要它们在稍后扫描文本文件时是唯一可识别的即可

这是我用来将 docx 文件转换为 txt 的脚本:

def docx2txt(file_path):
    document = opendocx(file_path)
    text_file = open("%s.txt" % file_path[:len(file_path)-5], "w")
    paratextlist = getdocumenttext(document)
    newparatextlist = []
    for paratext in paratextlist:
        newparatextlist.append(paratext.encode("utf-8"))
    text_file.write('\n\n'.join(newparatextlist))
    text_file.close()

最佳答案

硬分页符将显示为 <w:br>运行元素 ( <w:r> ) 中的元素,如下所示:

<w:p>
  <w:r>
    <w:t>some text</w:t>
    <w:br w:type="page"/>
  </w:r>
</w:p>

因此,一种方法是用独特的文本字符串替换所有这些出现的地方,例如“{{foobar}}”。

它的实现应该是这样的:

from lxml import etree
from docx import nsprefixes

page_br_elements = document.xpath(
    "//w:p/w:r/w:br[@w:type='page']", namespaces={'w': nsprefixes['w']}
)
for br in page_br_elements:
    t = etree.Element('w:t', nsmap={'w': nsprefixes['w']})
    t.text = '{{foobar}}'
    br.addprevious(t)
    parent = br.getparent()
    parent.remove(br)

我没有时间对此进行测试,因此您可能会遇到一些丢失的导入或其他问题,但您需要的一切都应该已经在 docx 模块中。剩下的就是lxml _Element 上的方法调用。

让我知道您的进展情况,如果需要,我可以进行调整。

关于python - 如何使用 python-docx 从 docx 识别分页符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24210216/

相关文章:

python - 错误 : sqlite3. 操作错误 : no such table: main. m

python - 如何在Python3中沿着第三维堆叠两个以上的numpy图像数组

python - 使用 Pyomo 求解和优化 ODE 系统时出了什么问题?

java - Apache POI 将 DOCX 转换为具有 EMF 图片格式的 PDF。

python - 在除第一页之外的所有页面上添加页眉和页脚?

python - 从python中的sqlite3数据库写入CSV

c - 为什么 `x && y` 没有被解析为 `x & (&y)` ?

c++ - Boost.Spirit 语法。属性和 _val 问题

python - 删除和替换 XML 文件中的特定节点

.net - 有没有办法生成 DOCX 文件的缩略图?