Python-data-persistence-shelve-module
Pythonデータの永続性-Shelveモジュール
Pythonの標準ライブラリのシェルフモジュールは、シンプルでありながら効果的なオブジェクト永続化メカニズムを提供します。 このモジュールで定義されるシェルフオブジェクトは、ディスクファイルに永続的に格納される辞書のようなオブジェクトです。 これにより、UNIXライクなシステム上のdbmデータベースに類似したファイルが作成されます。
シェルフ辞書には一定の制限があります。 この特別なディクショナリオブジェクトではキーとして使用できるのは文字列データタイプのみですが、ピクル可能なPythonオブジェクトは値として使用できます。
shelveモジュールは次のように3つのクラスを定義します-
Sr.No | Shelve Module & Description |
---|---|
1 |
Shelf これはシェルフ実装の基本クラスです。 dictのようなオブジェクトで初期化されます。 |
2 |
BsdDbShelf これはShelfクラスのサブクラスです。 コンストラクタに渡されるdictオブジェクトは、first()、next()、previous()、last()、およびset_location()メソッドをサポートする必要があります。 |
3 |
DbfilenameShelf これもShelfのサブクラスですが、dictオブジェクトではなく、ファイル名をパラメーターとしてコンストラクターに受け入れます。 |
*DbfilenameShelf* オブジェクトを返すshelveモジュールで定義されたopen()関数。
open(filename, flag='c', protocol=None, writeback=False)
filenameパラメータは、作成されたデータベースに割り当てられます。 フラグパラメータのデフォルト値は、読み取り/書き込みアクセスの「c」です。 その他のフラグは、「w」(書き込みのみ)「r」(読み取り専用)および「n」(読み取り/書き込みで新規)です。
シリアライゼーション自体はpickleプロトコルによって管理され、デフォルトはnoneです。 デフォルトでは、最後のパラメーターの書き戻しパラメーターはfalseです。 trueに設定すると、アクセスされたエントリがキャッシュされます。 すべてのアクセスがsync()およびclose()操作を呼び出すため、プロセスが遅くなる可能性があります。
次のコードは、データベースを作成し、その中に辞書エントリを格納します。
import shelve
s=shelve.open("test")
s['name']="Ajay"
s['age']=23
s['marks']=75
s.close()
これにより、現在のディレクトリにtest.dirファイルが作成され、キーと値のデータがハッシュ形式で保存されます。 Shelfオブジェクトには次のメソッドが用意されています-
Sr.No. | Methods & Description |
---|---|
1 |
close() 永続的なdictオブジェクトを同期して閉じます。 |
2 |
sync() ライトバックをTrueに設定してシェルフを開いた場合は、キャッシュ内のすべてのエントリを書き戻します。 |
3 |
get() キーに関連付けられた値を返します |
4 |
items() タプルのリスト–各タプルはキーと値のペアです |
5 |
keys() 棚鍵のリスト |
6 |
pop() 指定されたキーを削除し、対応する値を返します。 |
7 |
update() 別のdict/iterableから棚を更新する |
8 |
values() 棚の値のリスト |
棚の特定のキーの値にアクセスするには-
s=shelve.open('test')
print (s['age']) #this will print 23
s['age']=25
print (s.get('age')) #this will print 25
s.pop('marks') #this will remove corresponding k-v pair
組み込みディクショナリオブジェクトと同様に、items()、keys()、values()メソッドはビューオブジェクトを返します。
print (list(s.items()))
[('name', 'Ajay'), ('age', 25), ('marks', 75)]
print (list(s.keys()))
['name', 'age', 'marks']
print (list(s.values()))
['Ajay', 25, 75]
別のディクショナリのアイテムをシェルフとマージするには、update()メソッドを使用します。
d={'salary':10000, 'designation':'manager'}
s.update(d)
print (list(s.items()))
[('name', 'Ajay'), ('age', 25), ('salary', 10000), ('designation', 'manager')]