Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonオブジェクトの永続性(シェルフ)


Pythonの標準ライブラリのshelveモジュールは、リレーショナルデータベースソリューションを使用する必要がない場合に、永続的なデータストレージを実現するためのシンプルで効果的なツールです。このモジュールで定義されているシェルフオブジェクトは、ディスクファイルに永続的に保存される辞書のようなオブジェクトです。これにより、UNIXライクなシステムでdbmデータベースに似たファイルが作成されます。この特別なディクショナリオブジェクトでは、文字列データ型のみをキーとして使用できますが、任意の選択可能なオブジェクトを値として使用できます。

シェルフモジュールは、次の3つのクラスを定義します-

モジュールと説明
Sr.No。
1
これは、シェルフ実装の基本クラスです。 dictのようなオブジェクトで初期化されます。
2 BsdDbShelf
これはShelfクラスのサブクラスです。コンストラクターに渡されるdictオブジェクトは、first()、next()、previous()、last()、およびset_location()メソッドをサポートする必要があります。
3 DbfilenameShelf
これもShelfのサブクラスですが、dictオブジェクトではなく、コンストラクターへのパラメーターとしてファイル名を受け入れます。

Shelfオブジェクトを作成する最も簡単な方法は、DbfilenameShelfオブジェクトを返すshelveモジュールで定義されたopen()関数を使用することです。

open(filename, flag = 'c', protocol=None, writeback = False)

filenameパラメータは、作成されたデータベースに割り当てられます。

フラグパラメータのデフォルト値は、読み取り/書き込みアクセスの場合は「c」です。その他のフラグは、「w」(書き込み専用)、「r」(読み取り専用)、および「n」(読み取り/書き込みの新機能)

です。

プロトコルパラメータは、ピクルスプロトコルのライトバックパラメータがデフォルトで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。
1 close()
永続的なdictオブジェクトを同期して閉じます。
2 sync()
ライトバックをTrueに設定してシェルフを開いた場合は、キャッシュ内のすべてのエントリをライトバックします。
3 get()
キーに関連付けられた値を返します
4 items()
タプルのリスト–各タプルはキーと値のペアです
5 keys()
棚の鍵のリスト
6 pop()
指定されたキーを削除し、対応する値を返します。
7 update()
別のdict/iterableからシェルフを更新します
8 values()
棚の値のリスト

シェルフ内の特定のキーの値にアクセスします。

>>> s=shelve.open('test')
>>> s['age']
23
>>> s['age']=25
>>> s.get('age')
25

items()、keys()、values()メソッドはビューオブジェクトを返します。

>>> list(s.items())
[('name', 'Ajay'), ('age', 25), ('marks', 75)]
>>> list(s.keys())
['name', 'age', 'marks']
>>> list(s.values())
['Ajay', 25, 75]

キーと値のペアをシェルフから削除するには

>>> s.pop('marks')
75
>>> list(s.items())
[('name', 'Ajay'), ('age', 25)]

キーとマークの値のペア-75が削除されていることに注意してください。

別の辞書のアイテムをシェルフとマージするには、update()メソッドを使用します

>>> d={'salary':10000, 'designation':'manager'}
>>> s.update(d)
>>> list(s.items())
[('name', 'Ajay'), ('age', 25), ('salary', 10000), ('designation', 'manager')]

この記事では、永続的な辞書オブジェクトを格納するための便利なメカニズムを提供するシェルフモジュールについて学習しました。


  1. Pythonオブジェクトの比較「is」と「==」

    この記事では、オブジェクトの比較について学習します。つまり、演算子と等式演算子の間です。 等式演算子は渡された引数の値を処理しますが、is演算子は引数として渡された2つのオブジェクトの参照を比較します。 等しい場合、引数の演算子の内容はそれらの参照を無視して比較されます。つまり、異なる場所に格納されている同じコンテンツは同一であると見なされますが、演算子の参照を使用する場合は最優先事項です。 次に、以下の実装の概念を観察しましょう- 例 list_1 = ['t','u','t','o','r'] list_

  2. PythonのTimeTupleとは何ですか?

    datetime.dateインスタンスのtimetuple()メソッドは、time.struct_time型のオブジェクトを返します。 struct_timeは名前付きタプルオブジェクトです(名前付きタプルオブジェクトには、インデックスまたは名前でアクセスできる属性があります)。 struct_timeオブジェクトには、日付フィールドと時刻フィールドの両方を表す属性と、夏時間がアクティブかどうかを示すフラグがあります。 timetuple()関数によって返される名前付きタプルでは、​​日付オブジェクトに従って年、月、日のフィールドが設定され、時間、分、秒に対応するフィールドはゼロに設定され