こしあん
2018-09-23

zipに固められた複数のpickleファイルを解凍なしで読み込む

Pocket
LINEで送る
Delicious にシェア

834{icon} {views}

新刊情報

技術書典8の新刊『モザイク除去から学ぶ 最先端のディープラーニング』(A4・195ページ)好評通販中です! 機械学習の入門からGANの最先端までを書いたおすすめの本となっています! Boothで試し読みできます。情報まとめ・質問用GitHub


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()でそのまま出力させていますが、処理にあわせて適宜変えてください。

以上です。自分もよく忘れるのでメモとして。


新刊情報

技術書典8の新刊『モザイク除去から学ぶ 最先端のディープラーニング』好評通販中(A4・195ページ)です! Boothで試し読みもできるのでよろしくね!


Pocket
LINEで送る
Delicious にシェア

Add a Comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です