首页 > 解决方案 > 从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")

标签: pythonpython-3.xbinaryfiles

解决方案


首先,一些改进

  1. 在您的代码中,您是迭代它del的一个元素。student这是一个错误,在迭代字典时,您不应修改其键。
    有关更多信息,请阅读:
    https ://www.geeksforgeeks.org/python-delete-items-from-dictionary-while-iterating/
  2. 您根本不需要遍历字典。字典键是唯一的,因此检查是否x在字典中就足够了。你可以用if x in students:.
  3. 不要明确关闭文件描述符。请改用上下文管理器
    像这里: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)

推荐阅读