Pythonでzipファイルを操作する方法!作成・解凍・情報取得のコード例を解説
Pythonの標準ライブラリには、zipfileというモジュールが用意されています。このモジュールを利用することで、zipファイルに対してさまざまな操作を行うことができます。
zipファイルとは
zipファイルはアーカイブ(書庫)形式のファイルフォーマットです。可逆圧縮(ロスレス圧縮)に対応しているため、圧縮されたデータから元の状態を完全に復元できます。また、1つのzipファイルには複数の圧縮済みファイルを格納することが可能です。
zipファイルの優れた点は、ストレージ容量の削減だけでなく、ネットワーク経由での転送速度向上にも貢献する点です。ファイルサイズが小さくなることで、アップロードやダウンロードにかかる時間を短縮できます。
Pythonでzipファイルを扱うには、まずzipfileモジュールをインポートします。
from zipfile import ZipFile
ディレクトリからzipファイルを作成する
まずは、特定のディレクトリ内のファイルをまとめてzipファイル化する方法を見ていきましょう。ここでは、メインディレクトリの中にファイルといくつかのサブディレクトリが含まれているケースを想定します。
手順は以下の流れになります。
os.walk()を使ってディレクトリ全体を走査し、すべてのファイルとフォルダのパスをリストとして取得する- zipファイルを書き込みモードで開く
- 取得したパスをもとに、すべてのファイルをzipに書き込む
サンプルコード
# ディレクトリとサブディレクトリ内の全ファイルを取得し、zip化する
from zipfile import ZipFile
import os
def get_all_files(directory):
"""指定ディレクトリ内の全ファイルパスを取得する関数"""
paths = []
for root, dirs, files in os.walk(directory):
for f_name in files:
path = os.path.join(root, f_name) # ファイルのフルパスを生成
paths.append(path)
return paths # ファイルパスのリストを返す
directory = './sample_files'
paths = get_all_files(directory)
# 対象ファイル名を表示
print('以下のファイルがzipファイルに保存されます')
for file in paths:
print(file)
# 書き込みモードでzipファイルを開いて作成
with ZipFile('my_files.zip', 'w') as zf:
for file in paths:
zf.write(file)
print('zipファイルが正常に作成されました')
出力結果
以下のファイルがzipファイルに保存されます ./sample_files\TP_python_prev.pdf ./sample_files\text_files\file1.txt ./sample_files\text_files\file2.txt zipファイルが正常に作成されました
zipファイルを解凍(展開)する
次に、zipfileモジュールを使ってzipファイルを解凍する方法を紹介します。手順は以下の通りです。
- zipファイルを読み取り(read)モードで開く
extract()またはextractall()メソッドを使って内容を展開する
extract()メソッドは引数にパスを指定することで、zip内の特定のファイルだけを展開できます。一方、extractall()はzip内のすべてのファイルを一括で展開します。
サンプルコード
# zipファイルを解凍する
from zipfile import ZipFile
zip_file = 'my_files.zip'
with ZipFile(zip_file, 'r') as zf:
# zip内のファイル一覧を表示
zf.printdir()
# zipファイルからすべてのファイルを展開
zf.extractall()
print('zipファイルの解凍が完了しました')
出力結果
File Name Modified Size sample_files/TP_python_prev.pdf 2018-10-19 13:19:48 1915882 sample_files/text_files/file1.txt 2018-11-06 13:34:46 22 sample_files/text_files/file2.txt 2018-11-06 13:35:02 24 zipファイルの解凍が完了しました
infolist()でzipファイルの詳細情報を取得する
続いて、zipfileモジュールのinfolist()メソッドについて解説します。このメソッドを使うと、ファイル名・更新日時・ファイルサイズなど、zip内の各ファイルに関するさまざまな情報をリスト形式で取得できます。
サンプルコード
# zipファイルの情報を取得する
from zipfile import ZipFile
import datetime
zip_file = 'my_files.zip'
with ZipFile(zip_file, 'r') as zf:
for detail in zf.infolist():
print('ファイル名: ' + detail.filename)
print('\t更新日時: ' + str(datetime.datetime(*detail.date_time)))
print('\tZIPバージョン: ' + str(detail.create_version))
print('\tシステムバージョン: ' + str(detail.create_system)) # 0はWindows
print('\tファイルサイズ(バイト): ' + str(detail.file_size))
出力結果
ファイル名: sample_files/TP_python_prev.pdf 更新日時: 2018-10-19 13:19:48 ZIPバージョン: 20 システムバージョン: 0 ファイルサイズ(バイト): 1915882 ファイル名: sample_files/text_files/file1.txt 更新日時: 2018-11-06 13:34:46 ZIPバージョン: 20 システムバージョン: 0 ファイルサイズ(バイト): 22 ファイル名: sample_files/text_files/file2.txt 更新日時: 2018-11-06 13:35:02 ZIPバージョン: 20 システムバージョン: 0 ファイルサイズ(バイト): 24
まとめ
Pythonのzipfileモジュールを使えば、zipファイルの作成から解凍、詳細情報の取得まで簡単に行えます。
- 作成:
ZipFile('xxx.zip', 'w')で開き、write()でファイルを追加 - 解凍:
ZipFile('xxx.zip', 'r')で開き、extractall()やextract()で展開 - 情報取得:
infolist()でファイル名・日時・サイズなどを確認
日常的なファイル管理やデータのバックアップなど、さまざまな場面で活用できるので、ぜひ実際に試してみてください。
-
AirDroidでファイル転送する方法|PCとスマホ間のデータ移行を徹底解説
スマートフォンの急速な普及に伴い、PCとスマートフォンの間でファイルをやり取りするニーズは今や非常に高くなっています。しかし、実際にどのようにデータを転送すればよいのでしょうか。そんなときに役立つのが、AirDroidのようなファイル転送ツールです。 Part 1:AirDroidとは?ファイル転送の手順を解説 AirDroidは、PCとスマートフォンが同じIPネットワーク(同一ネットワーク環境)上にあれば、相互にファイルを共有できるファイル転送ソフトです。パソコンとスマートフォン間だけでなく、同じIPネットワークに接続されたすべてのデバイスとの間でファイルの送受信が可能です。 このソフトの最
-
コマンドプロンプト入門:ファイルとフォルダを操作する基本コマンド
コマンドプロンプト入門:ファイルとフォルダを操作する基本コマンド エクスプローラーを使わずにファイルを操作できたら便利だと思ったことはありませんか?開発者やITエンジニアの方なら、ターミナルでの作業は日常茶飯事でしょう。しかし、開発者でなくても、基本的なコマンドラインの知識は持っておいて損はありません。 このガイドでは、ターミナル作業で役立つ、よく使われるファイル操作コマンドを紹介します。 フォルダ間の移動には「cd」と「dir」 コマンドプロンプト(PowerShell や Windows Terminal でも同様)でファイルシステム内を移動するには、cd と dir という2つの基本コマ