shelve
shelve는 open()이라는 함수 하나만 가지고 있으며, 이 함수는 파일 이름인 매개변수를 받은 후 이를 저장하는 데 사용할 수 있습니다. , 그냥 저장이 끝나면 close 함수를 호출하여 닫으면 됩니다.
다음과 같이 잠재적인 작은 문제가 있습니다.
[python] view plaincopy
>> ;> import shelve
>>> s = shelve.open('test.dat')
>>> s['x'] = ['a', 'b' , 'c']
>>> s['x'].append('d')
>>> s['x']
['a', 'b', 'c']
저장된 d는 어디로 갔나요? 실제로는 매우 간단합니다. d는 다시 쓰지 않습니다. s['x']를 다시 읽으면 s['x']가 됩니다. 단지 사본이고 사본을 다시 쓰지 않았기 때문에 s['x'] 를 다시 읽으면 소스에서 사본을 읽으므로 새로 수정된 내용이 사본에 나타나지 않습니다. 해결책은 다음과 같습니다. 첫 번째는 아래와 같이 캐시된 변수를 사용하는 것입니다.
[python] view plaincopy
>>> temp = s['x']
>> ;> ('d')
>>> s['x'] = 임시
>>> s['x']
['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('이름 입력: ')
person['age'] = raw_input('나이 입력: ')
person['phone'] = raw_input('Enter 전화번호 : ')
db[pid] = 사람
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 'store : 사람에 대한 정보를 저장합니다.'
print 'lookup : ID 번호로 사람을 찾습니다'
print 'quit : 변경 사항을 저장하고 종료합니다'
print '? rint this message'
def enter_command():
cmd = raw_input('도움말을 보려면 명령 입력(?): ')
cmd = cmd.strip().lower ()
return cmd
def main():
Database = shelve.open('database.dat')
try:
while True:
cmd = enter_command ()
if cmd == 'store':
store_person(database)
elif cmd == 'lookup':
조회_사람(데이터베이스)
elif cmd == '?':
print_help()
elif cmd == 'quit':
반환
마지막으로:
데이터베이스.close()
if __name__ == '__main__': main()