|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
import pickle
print('|--- 欢迎进入通讯录程序 ---|')
print('|--- 1:查询联系人资料 ---|')
print('|--- 2:插入新的联系人 ---|')
print('|--- 3:删除已有联系人 ---|')
print('|--- 4:退出通讯录程序 ---|')
try:
f = open('通讯录数据库.pki','rb')
except OSError:
contacts = dict()
else:
contacts = pickle.load(f)
print(contacts)
f.close()
print(contacts)
while 1:
instr = int(input('\n请输入相关的指令代码:'))
if instr == 1:
name = input('请输入联系人姓名:')
if name in contacts:
print(name + ' : ' + contacts[name])
else:
print('您输入的姓名不再通讯录中!')
if instr == 2:
name = input('请输入联系人姓名:')
if name in contacts:
print('您输入的姓名在通讯录中已存在 -->> ', end='')
print(name + ' : ' + contacts[name])
if input('是否修改用户资料(YES/NO):') == 'YES':
contacts[name] = input('请输入用户联系电话:')
else:
contacts[name] = input('请输入用户联系电话:')
if instr == 3:
name = input('请输入联系人姓名:')
if name in contacts:
del(contacts[name]) # 也可以使用dict.pop()
else:
print('您输入的联系人不存在。')
if instr == 4:
break
print('|--- 感谢使用通讯录程序 ---|')
f =open('通讯录数据库.pki','ab')
pickle.dump(contacts,f)
f.close()
print(contacts)
这个通讯录程序 我想实现每次新添加的用户信息在退出后 还可以保存 下次进入程序后还有原有信息 可以从第一次运行程序 添加的用户信息保留了,但是第二次运行再添加的信息,第三次运行时就没有了,还是只有第一次运行添加进去的
三个print(contacts) 是自己测试数据添加是否成功的
本帖最后由 suchocolate 于 2021-1-13 12:10 编辑
pickle写入的是对象,执行一次load,只是加载1个对象,想加载所有需要再次使用load: - import pickle
- with open('test2.pkl', 'wb') as f:
- pickle.dump({1: 'a'}, f)
- with open('test2.pkl', 'ab') as f:
- pickle.dump({2: 'b'}, f)
- pickle.dump({3: 'c'}, f)
- with open('test2.pkl', 'rb') as f:
- print('只加载一个对象:', pickle.load(f))
- with open('test2.pkl', 'rb') as f:
- print('加载所有对象:')
- while True:
- try:
- print(pickle.load(f))
- except EOFError:
- exit(0)
复制代码
如果不想考虑追加问题,那么就在保存时wb重写,这样读取一次就够了。
- import pickle
- import os
- def show_menu():
- print('|--- 欢迎进入通讯录程序 ---|')
- print('|--- 1:查询联系人资料 ---|')
- print('|--- 2:插入新的联系人 ---|')
- print('|--- 3:删除已有联系人 ---|')
- print('|--- 4:退出通讯录程序 ---|')
- def load_file():
- """
- 定义加载文件函数
- :return: 联系人字典
- """
- if not os.path.exists('contact_db.pkl'):
- save_file(dict())
- with open('contact_db.pkl', 'rb') as f:
- result = pickle.load(f)
- return result
- def save_file(f_c):
- """
- 定义保存文件函数
- :param f_c:
- :return: none
- """
- with open('contact_db.pkl', 'wb') as f:
- pickle.dump(f_c, f)
- def main():
- """
- 定义主函数
- :return: none
- """
- show_menu()
- c = load_file()
- while True:
- cid = int(input('请输入相关的指令代码: '))
- if cid == 1:
- name = input('请输入联系人姓名: ')
- if name in c:
- print(f'{name}: {c[name]}')
- else:
- print('您输入的姓名不再通讯录中!')
- elif cid == 2:
- name = input('请输入联系人姓名: ')
- if name in c:
- print('您输入的姓名在通讯录中已存在 -->> ', end='')
- print(f'{name}: {c[name]}')
- if input(r'是否修改用户资料(Y/n):') in ['Y', 'y']:
- c[name] = input('请输入用户联系电话:')
- else:
- c[name] = input('请输入用户联系电话:')
- elif cid == 3:
- name = input('请输入联系人姓名:')
- if name in c:
- del (c[name])
- else:
- print('您输入的联系人不存在。')
- elif cid == 4:
- break
- else:
- print('请输入正确的id。')
- print('|--- 感谢使用通讯录程序 ---|')
- save_file(c)
- if __name__ == '__main__':
- main()
复制代码
|
|