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