LibreOffice Writer ドキュメントの非常に簡単な操作を行いたい...その後、ODT ファイルとして再度保存します...
これの何が問題なのですか?これを試してみると、zipファイル(ODTファイル)に2つのcontent.xmlが含まれています...奇妙なことに、これらの両方(たとえば、「content.xml」と「content_1.xml」として解凍された場合)には、変更されたコンテンツが含まれているようです...
zipfile = ZipFile( file_path, "a" )
for zip_info in zipfile.infolist():
contents = zipfile.read( zip_info.filename )
if ( zip_info.filename == "content.xml" ):
document_root = parseString( contents )
# ... mess around with the contents DOM document...
zipfile.writestr( zip_info, document_root.toxml() )
zipfile.close()
いろいろなアドインや使えるもの(UNO)があるのは承知しておりますが…なるべくシンプルにしたい…
後で
私の解決策: Python でプログラムによって zip ファイルから要素を削除する方法がないことがわかったので、最初は「新しい zip を作成する」アプローチを取ることにしました: ZipFile モジュールを使用して zipfile からファイルを削除する
ただし、結果として得られた ODT ファイルを開き、そこからすべてのファイルを抽出することはできましたが、7Zip は CRC エラーについて不平を言い、content.xml が「壊れた」と報告しました。明らかに、ある「content.xml」を別の「content.xml」に置き換えたことが原因です。
最終的な答え: 1) 変更された DOM 構造を同じディレクトリ内の単純なファイルに出力し、「content.xml」と呼びます。
f = open( file_dir + '\\content.xml', "w" )
print >>f, document_root.toxml()
f.close()
2) ODT ファイルがプログラムで閉じられている場合は、7zip CLI を利用します。
import subprocess
subprocess.Popen( "7z u temp.odt content.xml", cwd=file_dir, shell=True )