【Python】Zipファイル(圧縮ファイル)を扱う時に覚えておきたい4つの操作方法

こんにちは。関東の大学に通う大学生ミンチ(@programminchi)です。今回はPythonを使ってZipファイルと呼ばれる圧縮ファイルを操作する方法を学んでいきましょう。

 

 

Zipファイルとは?

Zipファイル(圧縮ファイル)とは、データ圧縮を施されたファイルのことです。

それでは、データ圧縮とは何でしょうか?

Wikipidiaでは以下のように書かれています。

データ圧縮(データあっしゅく)とは、あるデータをそのデータの実質的な性質(専門用語では「情報量」)を保ったまま、データ量を減らした別のデータに変換すること。
参照:Wikipidia

 

つまりは、Zipファイルにすることで、ファイルやフォルダの内容を変えずサイズを小さくできるということです。

ちなみにPythonを使ってZipファイルを扱いたいときは、zipfileモジュールの中のZipFile関数を使います。

よって、以下のようにzipfileモジュールをインポートしておいてください。

 

import zipfile

 

 

ファイルを圧縮してZipファイルを作ろう

それではまず既存のファイルを圧縮して、Zipファイルを作成していきましょう。

 

Zipファイルを作成する(ファイルの圧縮)

以下ではzipfileモジュールの中のZipFile関数を使用して、新たなZipファイルを作っていきます。

以下のコードを見てください。

 

import zipfile

with zipfile.ZipFile('C:\\Users\\minchi\\new.zip', 'w', compression=zipfile.ZIP_DEFLATED) as myzip:
    myzip.write('C:\\Users\\minchi\\file1.txt')

見て分かる通り、with文を使っていますね。

ZipFile関数の第1引数にはZipファイルを作る場所を指定します。

上のものを見れば分かる通り、フォルダminchiの下に、new.zipというZipファイルができてますね。

ちなみにZipファイルの拡張子はzipです。

 

ZipFile関数の第2引数にはwをとります。これはモードと言って、wを指定した時は、ファイルへの書き込み、もしくはファイルがない場合は作成されます。

今の場合、Zipファイルはまだ作られてないので、wを指定することで新しくnew.zipを作ることができます。

モードやwith文については以下の記事でより詳しく説明しているので参考にしてください。

 

【Python】ファイルの読み込み書き込みをやってみよう

 

最後に上のZipFile関数で第3引数に指定したcompressionで圧縮形式を指定します。

通常の圧縮でよい場合は、上のようにzipfile.ZIP_DEFLATEDでよいでしょう。

 

2行目ではwrite関数を使っています。

引数にファイルの場所を指定すると、そのファイルがZipファイルとして圧縮されます。

ここではfile1.txtが圧縮されるということです。

 

ファイルをZipファイルに追加する

上でZipファイルは作ることができたので、新たなファイルをこのZipファイルに追加してみましょう。

以下のようにしてください。

 

with zipfile.ZipFile('C:\\Users\\minchi\\new.zip', 'a') as add_zip:
    add_zip.write('C:\\Users\\minchi\\file2.txt')

基本的な記述の仕方はZipファイル作成の時と同じです。

異なる点はZipFile関数の第2引数。ここのモードをwではなくaにすることで、新たなファイルをZipファイル(new.zip)に追加することができます。

そして、ここではfile2.txtが新たにZipファイルの中に加えられました。

 

 

Zipファイルを元のファイルに戻す

次は、上で作成したZipファイルの中身を確認したり、中にあるファイルを展開したりする方法です。

 

Zipファイルの中身を読み込む

ではZipファイルの中にあるファイルを確認していきます。

以下を見てください。

 

with zipfile.ZipFile('C:\\Users\\minchi\\new.zip') as read_zip:
    print(read_zip.namelist())

Zipファイルの中身を見たいだけの時は、ZipFile関数では先ほどのようにモードを指定する必要はありません。

ここではread_zipにnamelist関数を適用することで、リストとして、Zipファイルの中にあるファイルが表示されます。

 

Zipファイルを展開する(中身のファイルを全て取り出す)

次はZipファイルを展開していきます。先ほどのように中身を見るだけではなく、元のファイルのサイズに戻します。

以下を見てください。

 

with zipfile.ZipFile('C:\\Users\\minchi\\new.zip') as ex_zip:
    ex_zip.extractall('C:\\Users\\minchi')

ここでもやることは中身を確認する場合と同じで、最後にextractall関数を適用してあげる部分だけ異なります。

こうすることで、new.zipの中に入っているfile1.txtとfile2.txtを元のファイルサイズとして復元することができます。

extractall関数では、ファイルを展開したいフォルダを指定します。

 

 

まとめ

今回はPythonを使って、Zipファイルを作製する方法、Zipファイルにファイルを追加する方法、Zipファイルから中身を読み出す方法、Zipファイルの中身を展開する方法を学びました。

Zipファイルに関しては、皆さんも普段から触れることが多いと思うので、1度Pythonを使ってZipファイルを操作してみてください。

 

今後も定期的にコンピュータ系の記事を発信していくので是非、興味のある人はツイッターの方もフォローお願いします!!


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です