我有几个 .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/