zipに固められた複数のpickleファイルを解凍なしで読み込む
Posted On 2018-09-23
Zipファイルに固められたファイル(pickleで圧縮した複数のファイル)をファイルに書き出すことなく読み込む方法を見ていきます。ディープラーニングで複数回訓練してその結果をまとめてZipに保存する、ということをよくやるので忘備録に。
infolist()でファイル一覧を読んで、pickle.loads()に渡す
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()でそのまま出力させていますが、処理にあわせて適宜変えてください。
以上です。自分もよく忘れるのでメモとして。
Shikoan's ML Blogの中の人が運営しているサークル「じゅ~しぃ~すくりぷと」の本のご案内
技術書コーナー
北海道の駅巡りコーナー