Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在pickle中删除数据_Python_Python 3.x_Pickle - Fatal编程技术网

Python 在pickle中删除数据

Python 在pickle中删除数据,python,python-3.x,pickle,Python,Python 3.x,Pickle,我有一个pickle数据库,里面有5个变量:rafTur、rafKat、rafNo、rafIndex、rafIndexData。我正在尝试删除pickle文件中的数据。我的主要目标是从用户那里获取如下输入: rafTur=S rafKat=1 rafNo=2 rafIndex=3 然后从我的pickle文件中找到名为noSqlDB的输入。然后删除有关输入的所有数据 def delPic(): infile = open('noSqlDB', 'rb+') sistem = p

我有一个pickle数据库,里面有5个变量:
rafTur、rafKat、rafNo、rafIndex、rafIndexData
。我正在尝试删除pickle文件中的数据。我的主要目标是从用户那里获取如下输入:

  • rafTur=S rafKat=1 rafNo=2 rafIndex=3
然后从我的pickle文件中找到名为
noSqlDB
的输入。然后删除有关输入的所有数据

def delPic():
    infile = open('noSqlDB', 'rb+')
    sistem = pickle.load(infile)
    flag = False

    rafTur = str(input('Rafın türünü giriniz : '))
    rafKat = int(input('Rafın katını giriniz : '))
    rafNo = int(input('Rafın Nosunu giriniz : '))
    rafIndex = int(input('Rafın indexini giriniz : '))

    # read to the end of file.
    for x in range((len(sistem) + 1)):
        try:

            if (sistem['rafTur'].upper() == rafTur.upper() and sistem['rafKat'] == rafKat and sistem['rafNo'] == rafNo and sistem['rafIndex'] == rafIndex):

                del sistem
                flag = True

            sistem = pickle.load(infile)
        except EOFError:
            break

    if flag == False:
        print('Record not Found')

    infile.close()
当我运行这段代码时,没有任何变化。数据保持在
noSqlDB
上。如何删除
noSqlDB
中的数据

我试着换衣服

del sistem

def unpickle_数据库(文件名):
将open(filename,'rb')作为f:
尽管如此:
尝试:
成品酸洗负荷(f)
除EOFError外:
打破
def save_对象(对象,文件名,a):
如果a<1:
以open(文件名为“wb+”)作为输出:
pickle.dump(obj、输出、pickle.u协议)
其他:
以open(文件名为“ab+”)作为输出:
pickle.dump(obj、输出、pickle.u协议)
def delPic():
温度=0
students=list(取消pickle_数据库('noSqlDB'))
对于学生中的学生:
印刷品(学生)
保存对象(学生,'noSqlDB',临时)
温度+=1

尝试了一些代码后找到了解决方案。

你再也不会写入pickle文件了,为什么你希望它会更改?@juanpa.arrivillaga所以删除还不够,我应该写入文件好的,我试试。你说的“删除”是什么意思
del sistem
删除变量,但即使它确实删除了不会影响pickle的对象。。。为什么会这样?注意,
del-sistem
没有任何用处,因为我所说的删除就是覆盖
sistem=pickle.load(infle)
。我不知道怎么做
del sistem['rafTur'],sistem['rafKat'], sistem['rafNo'],sistem['rafIndex'],sistem['rafIndexData']
def unpickle_database(filename):
    with open(filename, 'rb') as f:
        while True:
            try:
                yield pickle.load(f)
            except EOFError:
                break

def save_object(obj, filename,a):

    if a < 1:
        with open(filename, 'wb+') as output:
            pickle.dump(obj, output, pickle.HIGHEST_PROTOCOL)
    else :
        with open(filename, 'ab+') as output:
            pickle.dump(obj, output, pickle.HIGHEST_PROTOCOL)


def delPic():

    temp =0
    students = list(unpickle_database('noSqlDB'))

    for student in students:
        print(student)
        save_object(student, 'noSqlDB',temp)
        temp += 1