以下是引用星星对你眨眼在2019-10-10 23:06:10的发言:
print("|---欢迎进入通讯录程序---|")
print("|---1:查询联系人资料 ---|")
print("|---2:插入新的联系人 ---|")
print("|---3:删除已有联系人 ---|")
print("|---4:查看通讯录信息 ---|")
print("|---5:退出通讯录程序 ---|")
try:
file=open("Data.pyab","a+")
dict=eval(file.readline())
except:
file=open("Data.pyab","w")
dict={}
while(1):
n=input("请输入相关的指令代码:")
if(n=='1'):
key=input("请输入联系人姓名:")
if key in dict:
print(key+":"+dict[key])
else:
print("无此联系人!")
elif(n=='2'):
key=input("请输入联系人姓名:")
if(key in dict):
print("您输入的姓名在通讯录中已存在"+"-->>"+key+":"+dict[key])
lis=input("是否修改用户资料(yes/no):")
if iis=="yes":
value=input("请输入用户联系电话:")
dict[key]=value
else:
value=input("请输入联系人电话:")
dict[key]=value
elif(n=='3'):
key=input("请输入联系人姓名:")
del dict[key]
print("已删除"+key)
elif(n=='5'):
print("|---感谢使用通讯录程序---|")
strdict=str(dict)
print(strdict)
input("")
file.truncate()
file.seek(0)
file.write(strdict)
file.close
break
问题:
每次打开程序时,例如输入
小明 110
小红 119
退出程序后,Data.pyab内容:
{"小明":"110","小红":"119"}
没有错误.
但如果再次打开程序,输入
小黄 119
那么退出程序后,Data.pyab的内容就变成了只有
{"小黄":"119"}
之前输入的内容就会不见
首先你的程序有几个问题:
1.你在使用try ... except ...的时候需要
try:
...
except Exception as e:
print(e)
...
否则try里面报错你根本就不知道.象你这里程序由于try里有错误一直是在except里.try里面根本没进去.
2. 你得明白a+的含义是指文件打开.并且把文件指针移动到文件的最后.所以你的file.readline()永远是空,也就导致了你的eval(file.readline())会报unexpected EOF while parsing (, line 0)的错误
3.file.truncate(size)指的是从文件的首行首字节开始截断,截断文件为 size 个字节,无 size 表示从当前位置截断;file.seek(0)方法用于移动文件读取指针到指定位置。
我理解你的意思是想把文件清空,重新写入dict的内容.那么你应该先seek,再truncate.就是先把文件指针移动到文件的最开始,然后截掉后面的数据.否则就是往里面写了以追加的形式写入所有的dict
类似于 {'tt':1}{'ss':1}
4.你可以在开始最前面
程序代码:with open("Data.pyab","r") as f:
dict=eval(f.readline())
print(dict)
然后直接使用 file=open("Data.pyab","w")写入所有的dict
[此贴子已经被作者于2019-10-11 15:49编辑过]