说明:该实例是实现一个邮件地址薄,可以添加,删除,修改,查找。
代码如下:
import pickle,os,re #导入模块(如不熟这几个模块可查阅相关资料)
print('按数字1添加新成员,按数字2删除成员,按数字3修改成员,按数字4查找成员,按数字5退出\n\n')
#注意以下方法中:变量address引用的是一个对象
def print_address():#函数必须定义在调用之前
print('\n\n现在,你的通信录里已有这些人了:\n')
print('name<-------------->email\n')
for i in address:
print('%s<---------------->%s'%(i,address[i]))
print('\n\n')
def set_address(path):
with open(path,'wb') as f:
pickle.dump(address,f,True) #使用pickle来序列化存储python对象
#这里使用with来自动关闭文件
#也使用try...finally..解决方案
#(无论你以何种方式跳出with块,Python会自动关闭那个文件)
def get_address(path):
if not os.path.exists(path):
return {}
with open(path,'rb') as f:
if len(f.readline()) <=0:
return {}
f.seek(0)#将流对象定位到文件开头
b = pickle.load(f)#反序列化重新使用对象
return b
def option(path):
op = input('操作代码(1添加,2删除,3修改,4查找,5退出):')
if re.match("[0-9]{1}",op) == None: #使用正则
print('操作码错误!')
option(path)
op = int(op)
if op == 1:
name = input('请输入新成员的姓名:')
email= input('请输入新成员的Email:')
address[name] = email
elif op == 2:
name = input('请输入要删除成员的姓名:')
if name in address: #值的存在 if v in address.values()
del address[name]
else:
print('成员:'+name+'不在你的联系人表中。')
elif op == 3:
name = input('请输入要修改成员的姓名:')
if name in address:
email = input('请输入成员'+name+'的邮件地址:')
if email in address.values():
print('\n对不起,此邮件已存在了!\n')
else:
address[name] = email
print('\n修改成功!\n')
else:
print('\n成员 %s 不在你的联系人表中。\n'%(name))
elif op == 4:
name = input('请输入要查找成员的姓名:')
if name in address:
print('找到了 %s 成员,其信息如下:'%(name))
print('name: %s,email: %s'%(name,address[name]))
else:
print('\n成员 %s 不在你的联系人表中。\n'%(name))
elif op == 5:
exit()#退出
print_address()
set_address(path)#重新存储
option(path)#递归调用自己
##################运行############
path = 'test.pickle'
address = get_address(path)
if len(address)<1:
print('你的通信录为空,请按数字1添加你的通信录')
op = input('请输入:')
if len(op)<1 or int(op) != 1:
print('非法输入')
else:
name = input('请输入姓名:')
email= input('请输入Email:')
address[name] = email
set_address(path)
print_address()
else:
print_address()
option(path)
结果:

附:关于正则http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html
关于持久化(pickle):http://www.ibm.com/developerworks/cn/linux/l-pypers/