In [1]:
import sys , shelve
In [2]:
def store_person(db):
    '''
    Query user for data and store it in the shelf object
    '''
    pid = raw_input('Enter unique ID number: ')
    person = {}
    person['name'] = raw_input('Enter name:')
    person['age'] = raw_input('Enter age: ')
    person['phone'] = raw_input('Enter phone number: ')
    
    db[pid] = person
In [3]:
def lookup_person(db):
    '''
    Query user for ID and desired field, and fetch the corresponding data from the shelf object
    '''
    pid = raw_input('Enter ID number: ')
    field = raw_input('What would you like to know? (name, age, phone)')
    field = field.strip().lower()        #处理输入字符串的常用做法——去除两端的空白并且全部转化为小写,便于分析
                                          #另外还有lstrip函数只处理左端字符,rstrip只处理右端字符
    print field.capitalize() + ':', db[pid][field]          #capitalize方法返回一个首字母大写的副本字符串
In [5]:
def print_help():
    print 'The available command are: '
    print 'store    : Stores information about a person'
    print 'lookup : Looks up a person from ID number'
    print 'quit      : Save changes and exit'
    print '?           :Prints this message'          
In [6]:
def enter_command():
    cmd = raw_input('Enter command (? for help): ')
    cmd = cmd.strip().lower()
    return cmd
In [9]:
def main():
    database = shelve.open('database.dat')
    try:
        while True:
            cmd = enter_command()
            if cmd == 'store':
                store_person(database)
            elif cmd == 'lookup':
                lookup_person(database)
            elif cmd == '?':
                print_help()
            elif cmd == 'quit':
                return 
    finally:                  #把close方法写在finally子句可以确保文件能够关闭(即使程序异常,finally还是会被执行)
        database.close()
In [10]:
if __name__ == '__main__':
    main()
Enter command (? for help): ?
The available command are: 
store    : Stores information about a person
lookup : Looks up a person from ID number
quit      : Save changes and exit
?           :Prints this message
Enter command (? for help): store
Enter unique ID number: 314
Enter name:Zk
Enter age: 21
Enter phone number: 178
Enter command (? for help): lookup
Enter ID number: 314
What would you like to know? (name, age, phone)name
Name: Zk
Enter command (? for help): quit

In []: