【问题标题】:saving back to a docx xml file with python用python保存回docx xml文件
【发布时间】:2015-11-19 21:37:48
【问题描述】:

我正在尝试在 docx 文件上执行查找和替换,同时仍保持格式设置。

通过阅读本文,最好的方法似乎是在文档的 xml 文件上执行查找/替换。

我可以加载 xml 文件并在其上查找/替换,但不确定如何将其写回。

文档:

Hello {text}!

蟒蛇:

import zipfile

zip = zipfile.ZipFile(open('test.docx', 'rb'))
xmlString = zip.read('word/document.xml').decode('utf-8')
xmlString.replace('{text}', 'world')

【问题讨论】:

    标签: python xml


    【解决方案1】:

    您正在尝试的是危险的,因为您正在处理较低级别的高级 docx 文件。如果您真的想这样做,只需按照@shahvishal 的建议使用来自overwriting file in ziparchive 的提示。

    但除非你完全了解 docx 格式的所有细节,否则我的建议是:不要这样做。假设出于任何原因在内部字段或属性字符串{text}。您可能会以意想不到的方式更改文件,从而立即或更糟地导致文件销毁(Word 不再能够处理它)。

    如果您在安装了 Word 的 Windows 机器上进行处理,您当然可以尝试使用自动化来使用 Microsoft Word 处理文件。不幸的是,我很久以前才这样做,无法提供有用的链接。您将需要:

    • pywin30模块常识
    • 对 MS/WORD 的自动化界面有足够的了解。希望它的文档包含许多示例,前提是您已完整安装 Microsoft Office,包括宏帮助

    【讨论】:

      【解决方案2】:

      您真的会想要使用一个库来读取/写入 docx 文件,而不是试图将它们作为原始 XML 处理。粗略搜索了 pypi 模块docx,但我没有使用过这个模块,所以我不能认可它: https://pypi.python.org/pypi/docx/0.2.4

      我曾有过(不幸的)处理从其他编程语言处理 MS Office 文档的经历,并且花时间寻找真正得到回报的优秀库。

      俗话说“不要重新发明轮子”,我认为在处理重要的文件格式时这绝对是正确的。如果存在一个成熟的库来完成这项工作,请使用它!

      【讨论】:

      • 感谢您的回复。我以前使用过 docx,但根据我的经验,它不会继承格式
      • 似乎还有其他几个候选库,例如 python-docxdocx_replace 似乎特别适合您的需求。我会花时间研究它们。
      • python-docx 也不会继承格式。我从未尝试过 docx_replace。会试一试
      【解决方案3】:

      您需要替换 zip 存档中的文件。没有“简单”的方法可以实现这一目标。以下是一个应该有帮助的问题:

      overwriting file in ziparchive

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-30
        • 1970-01-01
        • 2014-03-17
        • 1970-01-01
        • 1970-01-01
        • 2021-04-03
        相关资源
        最近更新 更多