大量のログデータがZIPファイルで格納されている場合など、手作業で解凍するのは面倒なのでPythonで自動化するためのコードです
コード
from tqdm import tqdm
import os
import glob
import zipfile
#ZIPファイルの格納フォルダを指定
zip_dir = '../01_元データ/'
#解凍ファイルの格納フォルダを指定 上記と同じでもOK
unzip_dir = '../02_出力データ/'
#ZIPファイルを解凍する
zip_files = glob.glob(os.path.join(work_dir, '*.zip'))
for zip_file in tqdm(zip_files):
with zipfile.ZipFile(zip_file) as z:
for info in z.infolist():
#日本語名ファイルの文字化け処理
info.filename = info.orig_filename.encode('cp437').decode('cp932')
if os.sep != "/" and os.sep in info.filename:
info.filename = info.filename.replace(os.sep, "/")
z.extract(info, unzip_dir)
z.close()
# 100%|██████████| 2/2 [00:00<00:00, 194.90it/s]
ZIPファイルを格納したフォルダ(zip_dir = ‘../01_元データ/’)のZIPファイルが解凍先のフォルダ(unzip_dir = ‘../02_出力データ/’)に解凍されます。
またtqdmのプログレスバーで解凍の進捗状況を確認できます。
解説
glob.glob(os.path.join(work_dir, ‘*.zip’))
ZIPファイルの格納されたフォルダの中で「.zip」の拡張子のファイルの一覧を取得します。
info.orig_filename.encode(‘cp437’).decode(‘cp932’)
日本語のファイル名の場合そのままでは文字化けしてしまって解読できなくなってしまうのでcp932のSJISに変換します
z.extract(info, unzip_dir)
解凍先のフォルダに解凍します
日本語ファイル名の文字化け対応は下記ページを参考にしました
Python で zip 展開(日本語ファイル名対応) – Qiita