オブジェクトまで永続化できちゃうPythonのshelveは意外と便利

あまり知られていない気がするPythonシリーズ第二弾!(シリーズ名は今勝手につけましたw)
今回は超簡単にデータを永続化できる「shelve」を扱ってみます。

python logo

shelveは様々な形式のデータを永続化できます。しかも使い方は超簡単。別途パッケージインストールは不要!(Pythonに標準で組み込まれているハズ)

コードはコチラ。

[python title="test.py"]
#!/usr/bin/env python
# -*- coding:utf-8 -*-

class Hoge:
    def __init__(self):
        self._name = ''
        self._num = 0


    def set_name(self, name):
        self._name = name


    def get_name(self):
        return self._name


    def set_num(self, n):
        self._num = n


    def get_num(self):
        return self._num




if __name__ == '__main__':
    import shelve

    obj_list = []

    h1 = Hoge()
    h2 = Hoge()
    h3 = Hoge()

    h1.set_name('aaa')
    h1.set_num(1)
    obj_list.append(h1)

    h2.set_name('bbb')
    h2.set_num(2)
    obj_list.append(h2)

    h3.set_name('ccc')
    h3.set_num(3)
    obj_list.append(h3)

    # 保存用のファイルオープン
    dic = shelve.open('./hoge_data')

    # key - value でオブジェクトを突っ込む
    dic['obj'] = obj_list
    # 辞書を保存してみる
    dic['hash'] = { 'x' : 1, 'y' : 2, 'z' : 3}
    # 文字列も保存してみる
    dic['string'] = 'abcdefg'

    # 開いたら閉じましょう
    dic.close()
[/python]

これを実行すると、バイナリ形式のデータファイルができあがります。
ローカルファイル

んで、次はこういったスクリプトを作って中身を読み込んでみます。

[python title="read.py"]
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import shelve
from test import Hoge

dic = shelve.open('./hoge_data')

# キー全部表示
print dic.keys()

# 取り出してみる
test_dict = dic['hash']
print test_dict

test_str = dic['string']
print test_str

obj = dic['obj']
print obj

for o in obj:
    print o.get_name()
    print o.get_num()


dic.close()
[/python]

実行結果

[shell light="true"]
['hash', 'obj', 'string']  
{'y': 2, 'x': 1, 'z': 3}  
abcdefg  
[<test.Hoge instance at 0x103765ab8>, <test.Hoge instance at 0x103765b48>, <test.Hoge instance at 0x103765b90>]  
aaa  
1  
bbb  
2  
ccc  
3  
[/shell]

ちゃんと保存した通りに取り出せますね!オブジェクトも、オブジェクトのママ取り出せているのが分かると思います。

どうです、簡単でしょう(・∀・)?

使い捨てツールや小さなバッチを作っていると「あー、データをローカルにちょーーっと保存しておきたいんだけど・・・」っていう時がたまにあります。そういった時に最適!

非常に簡単なので、是非使ってみてくださいね!!

ちなみに知られていない気がするPythonシリーズ第一弾はコチラw
割と知られていないような気がするurlparseとoptparse (Python)

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください