LoginSignup
6
3

More than 5 years have passed since last update.

Pickleの使い方について、あまり言及されてないこと

Last updated at Posted at 2017-04-05

なんか気になったのでメモ。

pickleモジュールを使うと、バイナリデータとしてデータを保存することができる。

ここまでは良い。いろんなサイトで使い方が解説されていて、便利だ。

でもこいつに関しての情報が全くと言って、存在しない。

with open("test.pickle","wb") as f:
        for i in range(10):
            data = {i:"<<<data%d>>>" % i}
            pickle.dump(data,f)

このtest.pickleファイルには以下の情報が格納されたわけですが。

{0: '<<<data0>>>'}
{1: '<<<data1>>>'}
{2: '<<<data2>>>'}
{3: '<<<data3>>>'}
{4: '<<<data4>>>'}
{5: '<<<data5>>>'}
{6: '<<<data6>>>'}
{7: '<<<data7>>>'}
{8: '<<<data8>>>'}
{9: '<<<data9>>>'}

こいつらをload()するには、

with open("test.pickle","wb") as f:
        for i in range(10):
            yield pickle.load(f)

とかなんとかやってやりゃあいいんだけど、

たとえば、3番目のでーただけ欲しいぜ!って時は上から読み込まなきゃいけないのかな。
そこら辺の使い方がどうも転がっていない様子。

だれかご存知でしたら、ご教授ください。

追記

def get():
    with open("test.pickle","rb") as f:
        while True:
            try:
                yield pickle.load(f)
            except:
                break
data = get()
d = list(data)[3]
print(d)
{3: '<<<data3>>>'}

これで無事4番目のデータだけを取得できたけど、メモリ的にやさしい取り方なのかな?

6
3
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3