用python保存回docx xml文件

saving back to a docx xml file with python

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

通过阅读这些内容,最好的方法似乎是在文档的xml文件中执行查找/替换。

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

docx:

1
Hello {text}!

Python:

1
2
3
4
5
import zipfile

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

您尝试的操作很危险,因为您正在较低级别处理高级别的docx文件。如果您确实要这样做,请按照@shahvishal的建议使用ziparchive中覆盖文件的提示。

但是,除非您完全了解docx格式的所有详细信息,否则我的建议是:不要这样做。假设出于任何原因,内部字段或属性中都存在字符串{text}。您可能会以意想不到的方式更改文件,从而导致立即或什至更糟的是,导致文件被破坏(Word无法再对其进行处理)。

如果在安装了Word的Windows机器上进行处理,则当然可以尝试使用自动化功能通过Microsoft Word处理文件。不幸的是,我只是很久以前才做的,无法提供有用的链接。你会需要:

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

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

覆盖ziparchive中的文件


您确实要使用一个库来读取/写入docx文件,而不是尝试仅将它们作为原始XML处理。 pypi模块docx进行了粗略的搜索,但是我没有使用过该模块,因此我无法认可它:
https://pypi.python.org/pypi/docx/0.2.4

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

俗话说"不要浪费时间",当处理非平凡的文件格式时,我认为这绝对是正确的。如果存在一个成熟的库来完成这项工作,请使用它!