python中pickle存取文件的问题求助
在使用pickle.load()时遇到了难题,我用pickle.dump()将一个数据存进了文件,但是读取不出来了,而文件里打开显示是已经存上了数据的。代码如下,其中指令2能写入,但是指令2写入的数据这个函数读取不了,指令1,4正常。有没有大佬告诉我是什么原因导致的啊?
import pickle
def fun1():
print('''
1:查询联系人资料
2:插入新的联系人
3:删除已有联系人
4:退出通讯录
''')
pickle_file =open(r'D:\python\测试资源\联系人.txt','rb+')
t = pickle_file.readlines()
dict_name = pickle.loads(t)
dict_name_1=str(dict_name)
print(dict_name_1)
zhiling_daima =int(input('请输入相关的指令代码:'))
while True:
if zhiling_daima ==1:
temp_name = str(input('指令1:请输入名字:'))
if dict_name_1.find(temp_name):
print(dict_name)
pickle_file.close()
else:
print('没有找到')
return fun1()
elif zhiling_daima ==2:
temp_name = input('指令2:请输入名字:')
temp_phonenumber = input('指令2:请输入电话号码:')
dict_name = temp_phonenumber
pickle.dump(dict_name,pickle_file)
pickle_file.close()
print(dict_name)
print('联系人已写入')
return fun1()
elif zhiling_daima ==3:
temp_name = input('指令3:请输入名字:')
temp_yes =input('你确定要删除该联系人吗?(是/否)')
if temp_yes =='是':
del dict_name
pickle.dump(dict_name,pickle_file)
pickle_file.close()
print('删除成功')
return fun1()
elif zhiling_daima ==4:
temp_yes =input('指令4:你确定要退出吗?(是/否)')
if temp_yes =='是':
print('感谢使用')
pickle_file.close()
break
else:
print('代码有误')
pickle_file.close()
return fun1()
fun1()
这里说下注意事项,自己检查下代码吧,实在是太长了懒得看{:10_285:}
pickle每次读写都要注意,先open(),再读取(或写入),再close()
你这个一大串的close,看你代码还得追逻辑,还得分析你的逻辑合理性,说实话挺费时间的
碰到要经常性读写pickle的这种情况,其实你可以写2个函数,专门用来操作,一个读,一个写
读就提供1个参数,pickle文件的存放路径和文件名,返回一个字典
写就提供2个参数,pickle文件的存放路径和文件名,和一个字典,返回成功或失败,或者干脆不要返回值
笨鸟学飞 发表于 2020-11-18 16:59
这里说下注意事项,自己检查下代码吧,实在是太长了懒得看
pickle每次读写都要注意,先open(), ...
虽然没有解决问题,不过你的方法对我还是很有用的,代码看起来好多了
页:
[1]