3,116 views
この記事は最終更新から 1804日 が経過しています。
1. やりたいこと
Pythonの zipfile モジュールを使って
・ZIPファイルの解凍
・ZIPファイルの作成
を行いたい。
2. ZIPファイルを解凍する。
(1) 適当な ZIPファイルを用意する。
Windows10パソコンの Explorer上でファイルを選択し、右クリック → [送る] → [圧縮(ZIP形式)フォルダー] などの手順で ZIPファイルを作る。これを Pythonシェルからアクセスできるところに置く。
えっ!
Pythonを使うのでは?
と思ってしまうが、本項の目的は 解凍 なので、予め ZIPファイルを用意しておきたかっただけだ。
Pythonで圧縮したものを解凍する手順でもよいのだが、全く関係のない ZIPファイルを用意したかった。
(2) Pythonの zipfileモジュールで解凍する。
まずは zipfile モジュールを importする。
前述の Windows10で作成した ZIPファイルの名前は test.zip とした。
>>> import zipfile >>> fpath = './test.zip'
ZIPファイルとして認識されるか?
>>> zipfile.is_zipfile(fpath)
True
Trueと判定されたので、問題の無い ZIPファイルだ。
次に、ZipFile クラスのコンストラクタを使ってインスタンスを生成する。
>>> zf = zipfile.ZipFile(fpath, 'r')
このZIPファイルの中身を見てみる。
namelistメソッドで list型のオブジェクトが返される。
>>> flist = zf.namelist()
>>>
>>> type(flist)
<class 'list'>
>>>
>>> len(flist)
20
>>>
>>> flist
['20190517.csv', '20190522.csv', '20190524.csv', '20190602.csv', '20190610.csv', '20190611.csv', '20190614.csv',
'20190624.csv', '20190626.csv', '20190704.csv', '20190720.csv', '20190723.csv', '20190731.csv', '20190802.csv',
'20190819.csv', '20190823.csv', '20190918.csv', '20191015.csv', '20191023.csv', '20191030.csv']
extractall メソッドで解凍を実行!
>>> zf.extractall()
できた!
bashの shellで確認したところ、確かに中身が解凍されていた。
[user@]$ ll total 476 -rw-rw-r--. 1 user user 14605 Oct 30 13:43 20190517.csv -rw-rw-r--. 1 user user 14932 Oct 30 13:43 20190522.csv -rw-rw-r--. 1 user user 15114 Oct 30 13:43 20190524.csv -rw-rw-r--. 1 user user 15458 Oct 30 13:43 20190602.csv -rw-rw-r--. 1 user user 15890 Oct 30 13:43 20190610.csv -rw-rw-r--. 1 user user 15921 Oct 30 13:43 20190611.csv -rw-rw-r--. 1 user user 16170 Oct 30 13:43 20190614.csv -rw-rw-r--. 1 user user 16347 Oct 30 13:43 20190624.csv -rw-rw-r--. 1 user user 16429 Oct 30 13:43 20190626.csv -rw-rw-r--. 1 user user 16481 Oct 30 13:43 20190704.csv -rw-rw-r--. 1 user user 1205 Oct 30 13:43 20190720.csv -rw-rw-r--. 1 user user 16517 Oct 30 13:43 20190723.csv -rw-rw-r--. 1 user user 16735 Oct 30 13:43 20190731.csv -rw-rw-r--. 1 user user 16862 Oct 30 13:43 20190802.csv -rw-rw-r--. 1 user user 16951 Oct 30 13:43 20190819.csv -rw-rw-r--. 1 user user 16987 Oct 30 13:43 20190823.csv -rw-rw-r--. 1 user user 17193 Oct 30 13:43 20190918.csv -rw-rw-r--. 1 user user 17509 Oct 30 13:43 20191015.csv -rw-rw-r--. 1 user user 17545 Oct 30 13:43 20191023.csv -rw-rw-r--. 1 user user 17759 Oct 30 13:43 20191030.csv -rw-rw-r--. 1 user user 124477 Oct 30 13:38 test.zip
3. ZIPファイルを作成(=ファイルを圧縮)する。
(1) 適当なファイルを用意する。
今回は、上記2で解凍した CSVファイルを圧縮対象とする。
(2) Pythonの zipfileモジュールで圧縮する。
まずは zipfile モジュールを importする。
作成する ZIPファイルの名前を arc.zip とする。
>>> import zipfile >>> fpath = './arc.zip'
次に、ZipFile クラスのコンストラクタを使ってインスタンスを生成する。
引数 compression で圧縮アルゴリズムを指定しないと、ただ一つのファイルにパックするだけでサイズが縮まない。
>>> zf = zipfile.ZipFile(fpath, 'w', compression=zipfile.ZIP_DEFLATED))
こうして作成したZipFileクラスインスタンスに対して、write メソッドで圧縮対象ファイルを加えていく。
>>> zf.write('20190517.csv') >>> zf.write('20190522.csv')
できた!
bashの shellで確認したところ、確かにサイズが縮んだ ZIPファイルが出力されていた。
[user@]$ ll *.zip -rw-rw-r--. 1 user user 11670 Oct 30 14:58 arc.zip
3. 応用
後日追記
・ディレクトリまるごと圧縮
・with構文を使った書き方
・既存のZIPファイルへの追加
・パスワード付き ZIPファイルの作成
などなどを追記予定
x. 参考
ありがとうございます。 m(_ _)m
https://docs.python.org/ja/3/library/zipfile.html : zipfile公式