こしあん
2018-09-23

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

Pocket
LINEで送る

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

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

Related Posts

CIFAR-10/100のバイナリを画像ファイルに書き出す方法... CIFAR-10/100は画像分類として頻繁に用いられるデータセットですが、たまに画像ファイルでほしいことがあります。配布ページにはNumpy配列をPickleで固めたものがあり、画像ファイルとしては配布されていないので個々のファイルに書き出す方法を解説していきます。 コード まずは配布ページ...
pickle.loadで読み込み時にUnicodeDecodeError pickle.dump()で保存は上手く行ったのに、それを読み込むとエラー吐いて原因がよくわからない……それで一時間近くハマったという恐怖な話。 pickle.load()で読み込むとこのようなエラーが出るおかしい。マルチバイト文字なんか入れていないのに。 UnicodeDecodeEr...
Pocket
Delicious にシェア

Add a Comment

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