问题描述
二进制文件中的每条记录都是这样存储的
import pickle
student={}
def add():
n=int(input("enter number of entries"))
for i in range(n):
name=input("enter names")
marks=eval(input("enter marks"))
student[name]=marks
f=open("sample.dat","wb")
pickle.dump(student,f)
f.close()
如果要删除name=如何操作
我试过这样但不正确
def delete():
x=input("enter name to be deleted")
for i in student:
if x==i:
del student[x]
else:
print("name not found")
解决方法
首先,一些改进
- 在您的代码中,当您迭代它时,您
del
一个student
元素。 这是一个错误,在迭代字典时你不应该修改它的键。
欲了解更多信息,请阅读:
https://www.geeksforgeeks.org/python-delete-items-from-dictionary-while-iterating/ - 您根本不需要遍历字典。字典键是唯一的,因此检查
x
是否在字典中就足够了。你可以用if x in students:
做到这一点。 - 不要明确关闭文件描述符。改用上下文管理器。
例如:https://cmdlinetips.com/2016/01/opening-a-file-in-python-using-with-statement/
对于其他一切,我不得不猜测,因为您的问题不够具体。
我猜测您希望在调用 delete()
函数时文件内容发生变化。但是 delete() 函数不会写入任何文件,所以您可能忘记将新的 student
字典保存到文件中?
只是一个疯狂的猜测:
def delete():
x=input("enter name to be deleted")
if x in student:
del student[x]
else:
print("name not found")
with open("sample.dat","wb") as f:
pickle.dump(student,f)
,
迭代时不能修改字典的内容。
你可以做的是迭代字典的键数组,如果匹配就从字典中删除项目。
即将删除功能更改为:
def delete():
x=input("enter name to be deleted")
for key in list(dict.keys(student)):
if key==x:
print('matched')
del student[key]