python - 从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()
如果要删除 name=<"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)
推荐阅读
- java - JPA - 另一个表中使用的多对多主键
- python-3.x - 带有 Python 3.6 ImageTk 的 MacOS 不显示图像
- delphi - Delphi 内联使用导致“F2084 内部错误”
- c# - 如何使用 ClosedXML 从 excel 文件中读取单元格值
- r - 在引导程序中在 R 中获取 NaN
- c# - 无法反序列化 JSON 对象
- scala - Scala私有应用方法?
- ruby-on-rails - 创建与多态嵌套属性的关联时出错
- php - 在 Symfony2 控制器中模拟 Guzzle 请求
- oracle - Oracle:减去小时数并显示 TIMESTAMP(6) 列的毫秒数