沢山のファイルが詰め込まれている Zip ファイルから、特定の条件(拡張子とか)のものだけ選んで解凍保存したい。その際、パスが深いと保存場所がとっ散らかるのでディレクトリは取っ払って一箇所に集めたい、という状況で書いた Python コードです。
下記は、拡張子が .xbrl
のものだけ見つけて、パスからディレクトリ部分を除去してカレントディレクトリに保存するという例です。ファイル名が重複している場合は考慮してません。
import zipfile import re import os zip_file = 'my.zip' with zipfile.ZipFile(zip_file, 'r') as zf: for info in zf.infolist(): m = re.match(r'.+\.xbrl', info.filename, flags=re.IGNORECASE) if not m: continue info.filename = os.path.basename(info.filename) zf.extract(info)
info.filename への上書きでファイルパスを変更し、extract() にその info を渡すところがキモでしょうか。割とありがちなユースケースのような気がしますが、結構調べてしまったのでおすそ分けです。しかし、何をやろうとしているのかが拡張子でバレバレですなw