本帖最后由 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()
|