python保存_Python 文件保存异常

以下是引用星星对你眨眼在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.你可以在开始最前面

code.gif程序代码:with open("Data.pyab","r") as f:

dict=eval(f.readline())

print(dict)

然后直接使用 file=open("Data.pyab","w")写入所有的dict

[此贴子已经被作者于2019-10-11 15:49编辑过]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值