Zipファイルに固められたファイル(pickleで圧縮した複数のファイル)をファイルに書き出すことなく読み込む方法を見ていきます。ディープラーニングで複数回訓練してその結果をまとめてZipに保存する、ということをよくやるので忘備録に。
pickle — Python オブジェクトの直列化
13.5. zipfile — ZIP アーカイブの処理
import zipfile, pickle
with zipfile.ZipFile(zip_file) as zip:
for info in zip.infolist():
if info.is_dir(): continue
data = pickle.loads(zip.read(info.filename))
print("\n", data)
まずはinfolist()でZip内のオブジェクト一覧を取得します。これにはディレクトリも含まれているので、info.is_dir()で除外します。他にもPickle以外のファイルがあったら適宜除外してください。
次にzip.readで読み込むとバイナリで出てくるので、このオブジェクトをデシリアライズしたいときはpickle.loads()【複数形に注意】に読ませます。print()でそのまま出力させていますが、処理にあわせて適宜変えてください。
以上です。自分もよく忘れるのでメモとして。