Pythonの技法:ZIPアーカイブを読む

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

 Pythonには、ライブラリに関して「batteries included」(バッテリーが付属しております)という哲学が存在することがよく知られている。これは、スクリプトを記述する際に必要な基本的な処理は、その大部分が標準ライブラリ内の関数で実行可能だということを表現している。標準ライブラリはPythonの配布パッケージに含まれているため、他のライブラリを導入する必要がないのである。これはzipアーカイブの操作に関しても例外ではなく、zipfileモジュールによってその機能が提供されている。

 ただし、もしzipアーカイブを本格的に操作したいなら、アーカイブ内での各ファイルの配置に関する仕様をあらかじめ把握しておく必要があるだろう。このことに関して詳しく知りたい方は、PKWAREが公開している「ZIP Application Note」を参照するのがもっともよい。このアプリケーションノートには、.zipアーカイブのファイルフォーマットに関する仕様が完全に記述されている。ちなみに、PKWAREは圧縮アルゴリズムの発展に関与している企業だ。

 本稿では「test.zip」という名前のzipファイルに対して操作を行うこととする。「test.zip」には「file1.txt」と「file2.txt」の2つのファイルが含まれているという設定だ。この記事を読み続けるつもりなら、ファイルをここからダウンロードしよう。

 それでは、まずはもっとも重要なことから始めよう。以下のようにしてファイルを読み込むことにより、ZipFileインスタンスを作成する。

import zipfile

f = file("test.zip")
z = zipfile.ZipFile(f)

 注意:zipファイルを修正したら、常にアーカイブを閉じるように注意する必要がある。本稿ではファイルの変更は行わないが、アーカイブを閉じる癖をつけておくことは重要である。ZipFileは以下のようにして閉じることが可能だ。

z.close()

 ZipFileは作成できた。次は何をすればよいのだろうか?zipファイルを操作する目的がもしアーカイブ内のコンテンツを取り出すことだけなら、readメソッドを用いて次のように記述すればよい。

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

"Testing, testing, one two three."

 さて、zipアーカイブの内容を読み取るには、モジュール内で定義されてる2つのクラスを利用する必要がある。1つ目は、すでに利用しているZipFileクラスだ。ZipFileでは、アーカイブ全体に関するメソッドを扱う。たとえば、アーカイブのオープン、クローズや、読み書き、含まれているファイル一覧の取得などは、すべてZipFileで行える。

 ところで、アーカイブのオープンとクローズ、読み取りは先ほど実際に使用した。また、書き込みに関しては、別の機会に説明することとしたい。そこで、ここではファイルの一覧を取得する方法を見てみよう。以下のコードは、引数としてzipアーカイブの名前を複数受け取って、その内容を出力する簡単なPythonのスクリプトである。

  • 新着記事
  • 特集
  • ブログ
このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]