A Byte of Python - 通讯录

什么也不说,直接上:

import pickle, os, logging

version = '0.0.1'

logging.basicConfig(
filename='address_log.log',
level=logging.DEBUG,
format='%(asctime)s: %(levelname)s: %(message)s'
)

book_file = 'address_book.data'

def save(name, phone, address):
#保存新记录。
#Todo:
#1. 增加异常处理:当文件存在,但为空时,load时会出错
#2. 目前保存的字段都是固定的,增加删除一个字段很麻烦,需要优化
if not os.path.exists(book_file):
book = {}
f = open(book_file, 'wb')
book[name]=[phone, address]
pickle.dump(book, f)
f.close()
logging.info('新建地址本成功,并且新增了第一条数据,数据信息为:{0}'.format(book[name]))
print('保存成功')
print('')
input('输入任意字符返回')
else:
f = open(book_file, 'rb')
book = pickle.load(f)
f.close()
f2 = open(book_file, 'wb')
book[name]=[phone, address]
pickle.dump(book, f2)
f2.close()
logging.info('保存名字为 {0} 的数据成功'.format(name))
print('保存成功')
print('')
input('输入任意字符返回')

def view_all():
f = open(book_file, 'rb')
book = pickle.load(f)
j = 1
for i in book.keys():
print ('----------第', j ,'条记录,总共', len(book), '条记录----------')
print ('姓名:',i)
print ('手机:',book[i][0])
print ('地址:',book[i][1])
j = j + 1
f.close()
logging.info('打印所有记录, 总共有{0}条数据'.format(len(book)))
print('')
input('输入任意字符返回')

def search(name): #以名字为键值进行查找
f = open(book_file, 'rb')
flg = False
book = pickle.load(f)
for i in book.keys():
if i == name:
print('查询结果:')
print('姓名:', name)
print('电话:', book[i][0])
print('地址:', book[i][1])
flg = False
logging.info('查找到一条数据,姓名:{0}, 电话:{1}, 地址:{2}'.format(i, book[i][0], book[i][1]))
print('')
input('输入任意字符返回')
break
else:
flg = True
if flg:
print('没有找到相关记录')
logging.info('没有找到姓名为 {0} 的记录'.format(name))
print('')
input('输入任意字符返回')

def remove(name): #以名字为键值进行删除
f = open(book_file, 'rb')
book = pickle.load(f)
book2 = book.copy()
f.close()
for i in book.keys():
if i == name:
f = open(book_file, 'wb')
del book2[i]
pickle.dump(book2, f)
f.close()
logging.info('成功删除姓名为 {0} 的记录'.format(name))
print('成功删除名字为{0}的记录'.format(name))
break;
f.close()

def modify(name):#修改记录
f = open(book_file, 'rb')
book = pickle.load(f)
book2 = book.copy()
f.close()
for i in book.keys():
if i == name:
f = open(book_file, 'wb')
phone = input('输入电话号码:')
address = input('输入地址:')
book2[name] = [phone,address]
pickle.dump(book2, f)
logging.info('成功修改姓名为 {0} 的记录,新的电话号码是 {1}, 新的地址是: {2}'.format(name, phone, address))
break
print('')
input('输入任意字符返回')

#主界面
while True:
print('')
print('1.查询所有记录')
print('2.查询单个记录')
print('3.修改记录')
print('4.删除记录')
print('5.新增记录')
print('0.退出')
print('')
i = input('请输入:')
if i == '1':
view_all()
elif i == '2':
name = input('输入名字:')
search(name)
elif i == '3':
name = input('输入名字:')
modify(name)
elif i == '4':
name = input('输入名字:')
remove(name)
elif i == '0':
print('你已退出')
break
elif i == '5':
name = input('输入姓名:')
phone = input('输入电话号码:')
address = input('输入地址:')
save(name, phone, address)
else:
print('输入错误,请重新输入')
continue
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值