2015-11-19 90 views
0

我試圖在prex的文件上查找和替換,同時仍然保持格式化。使用python保存回docx xml文件

從上面看,最好的方法似乎是在文檔的xml文件上執行find/replace操作。

我可以加載XML文件並找到/替換它,但不確定如何寫回來。

的docx:

Hello {text}! 

蟒蛇:

import zipfile 

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

回答

0

你正在嘗試是很危險的,因爲你正在處理在較低的水平高槓杆的docx文件。如果你真的想這樣做,只需使用@shahvishal建議的overwriting file in ziparchive提示。

但是除非你完全瞭解docx格式的所有細節,否則我的建議是:不要那樣做。假設在內部字段或屬性字符串{text}有任何理由。您可能會以意外的方式立即更改文件,甚至導致文件被破壞(Word不再能夠處理該文件)。

如果您在安裝了word的Windows計算機上進行處理,您當然可以嘗試使用自動化功能來使用Microsoft Word處理該文件。不幸的是,我只有很久以前才做過,並且不能提供有用的鏈接。你將需要:

  • pywin30模塊MS/WORD的自動化接口
  • 足夠的知識,對一般知識。希望它的文檔很好,有很多例子,只要你有完整的Microsoft Office安裝包括宏幫助
0

你真的會想使用圖書館的讀/寫docx文件,而不是試圖只是對付他們的原始XML 。粗略搜索想出了PyPI將模塊docx但我沒有用過這個模塊,所以我不能認同它: https://pypi.python.org/pypi/docx/0.2.4

我已經處理的MS Office文檔操作的(不幸的)經驗來自其他編程語言,並花時間找到真正收益良好的庫。

俗話說「不要重新發明輪子」,我認爲在操縱非平凡的文件格式時絕對是真的。如果有一個比較成熟的圖書館來完成這項工作,請使用它!

+0

感謝您的迴應。我之前使用過docx,但從我的經驗來看,它並沒有進行格式化 – user3972986

+0

似乎還有其他一些候選庫,例如'python-docx'和'docx_replace'似乎特別適合您的需求。我會花時間研究它們。 – davecom

+0

python-docx不會繼續格式化。我從未嘗試過docx_replace。會放棄它 – user3972986