Pythonの技法:ZIPアーカイブへの書き込みと追記

文:Nick Gibson(Builder AU)  翻訳校正:原井彰弘
2008-01-08 14:00:00
  • このエントリーをはてなブックマークに追加

 もし、前回のzipアーカイブの読み取りに関する記事を読んでいないのであれば、一通り読んでみることをおすすめしたい。本稿では、前回の記事に登場した「file1.txt」と「file2.txt」を引き続き例として用いている。

 さて、ただ単に複数のファイルを含んだ新しいzipファイルを作成したいだけなら、zipfileモジュールを用いてわずか数行で記述することが可能である。それにはまず、書き込みモードでアーカイブを作成することから始めよう。

>>> import zipfile
>>> z = zipfile.ZipFile("test2.zip", "w")

 その上で、次のようにファイルの追加を行う。

>>> z.write("file1.txt")
>>> z.write("file2.txt")

 これだけで、本質的な部分はすべて終わりである。ファイルのオープンや読み込み、圧縮、アーカイブへの挿入など、細かな部分はzipfileモジュールがすべて行ってくれるのだ。信じられない?それでは、実行後のファイルの内容を実際に見てみよう。まずファイルを一度閉じ、読み取りモードとしてもう一度開いてみる。

>>> z.close()
>>> z = zipfile.ZipFile("test2.zip")
>>> z.printdir()
File Name                                             Modified             Size
file1.txt                                      2007-10-11 14:03:12           54
file2.txt                                      2007-10-11 14:03:32           37

 前回の記事で書いた関数と同様に、zipfileのprintdir()メソッドがアーカイブ内のファイルを出力しているということが、お分かりいただけたと思う。もちろん、以下のようにしてファイルにデータが正しく含まれていることをチェックしてもよい。

>>> print z.read("file1.txt")
File One Contents

"Testing, testing, one two three."

 さて、新しくzipアーカイブを作成する方法は分かったが、すでに存在するzipアーカイブにファイルを追加したい場合は、どうすればよいのだろうか?実はこれも単純で、ただ単に追記モードでファイルを開けばよいだけなのである。もしここで誤って書き込みモードでzipファイルを開いてしまうと、ファイルの内容が削除されてしまう。追記を行う場合にはくれぐれも注意していただきたい。

  • 新着記事
  • 特集
  • ブログ