从 python 中的二进制文件中删除特定记录
deleting a specific record from a binary file in python
二进制文件中的每条记录都是这样存储的
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()
如果要删除名称为<"some 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]
二进制文件中的每条记录都是这样存储的
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()
如果要删除名称为<"some 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]