ホームページ >バックエンド開発 >Python チュートリアル >Pythonシェルブモジュール
shelve
shelve は、open() という 1 つの関数だけを持ち、ファイル名であるシェルフ オブジェクトを返します。これは、次のように、単純に辞書として扱われます。これには、次のように、close 関数を呼び出します。
>> s = shelve.open('test.dat')
>>> = ['a', 'b', 'c']
> ;> s[ 'x'].append('d')
>>> s['a', 'b', 'c']
保存された d はどこへ行ったのか?実際、これは非常に単純です。d は ['a', 'b', 'c'] を x に保存します。s['x'] は次のようになります。単なるコピーであり、コピーを書き戻していないため、 s['x'] を再度読み取ると、ソースからコピーが読み取られるため、新しく変更されたコンテンツはコピーに表示されません。 1 つ目は、以下に示すように、キャッシュされた変数を使用することです
[python] view plaincopy
>>> temp = s['x']
>>>
>>> s['x'] = temp
>>> s['a', 'b', 'c', 'd' ]
別の方法もありますpython2.4では、openメソッドのwritebackパラメータの値をTrueに割り当てます。この場合、開いた後のすべてのコンテンツは、閉じるときにすべてキャッシュに書き込まれます。ハードドライブに。データ量がそれほど多くない場合は、これをお勧めします。
以下は shelve
[python] view plaincopy
#database.py
import sys, shelve
def store_person(db):
"""
ユーザーにデータを問い合わせて保存するコードです。棚オブジェクト内
""" pid = raw_input('一意の ID 番号を入力してください: ')
person = {}
person['name'] = raw_input('Enter name: ')
person['age'] = raw_input ( '年齢を入力してください: ')
person['phone'] = raw_input('電話番号を入力してください: ') db[pid] = person
def lookup_person(db):
"""
ID と必要なフィールドをユーザーに問い合わせます 、そして、
棚オブジェクトから対応するデータを取得します
"""
pid = raw_input('ID 番号を入力してください: ')
field = raw_input('何を知りたいですか? (名前、年齢、電話番号) ')
field = field.strip(). lower()
print field.capitalize() + ':',
db[pid][field]
def print_help():
print '利用可能なコモンは次のとおりです: '
print ' ストア:個人に関する情報を保存します'
print 'lookup :ID 番号から個人を検索します'
print 'quit :変更を保存して終了'
print '?このメッセージを印刷します'
def enter_command(): cmd = raw_input ('Enterコマンド (? ヘルプ用): ')
cmd = cmd.strip(). lower()
return cmd
def main():
Database = shelve.open('database.dat') try: U While True:
CMD = ENTER_COMMAND ()
if cmd == 'Store':
store_person (データベース)
elif cmd == 'lookup':
lookup_person(データベース)
elif cmd == '?':
print_help()
elif cmd == '終了':
return
最後に:
database.close()
if __name__ = = '__main__': main()