Open In App

How to delete from a pickle file in Python?

Python pickle module is used for serializing and de-serializing a Python object structure. Any object in Python can be pickled so that it can be saved on disk. What pickle does is that it “serializes” the object first before writing it to file. Pickling is a way to convert a python object (list, dict, etc.) into a character stream. The idea is that this character stream contains all the information necessary to reconstruct the object in another python script

Pickle serializes a single object at a time, and reads back a single object – the pickled data is recorded in sequence on the file. If you simply do pickle.load you would be reading the first object serialized into the file (not the last one as you’ve written). After unserializing the first object, the file-pointer is at the beginning of the next object – if you simply call pickle.load again, it will read that next object – do that until the end of the file.



Functions Used:

Syntax:

pickle.dump(obj, file, protocol = None, *, fix_imports = True)



Syntax:

pickle.load(file, *, fix_imports = True, encoding = “ASCII”, errors = “strict”)

To delete contents from a pickle file we first need to add contents to it, given below is an approach for doing the same along with its implementation:

Approach

Program:




import pickle
 
def write_file():
 
    f = open("travel.txt", "wb")
    op = 'y'
 
    while op == 'y':
 
        Travelcode = int(input("enter the travel id"))
        Place = input("Enter the Place")
        Travellers = int(input("Enter the number of travellers"))
        buses = int(input("Enter the number of buses"))
 
        pickle.dump([Travelcode, Place, Travellers, buses], f)
 
        op = input("Dp you want to continue> (y or n)")
 
    f.close()
 
 
print("entering the details of passengers in the pickle file")
write_file()

Now since we have data entered into the file the approach to delete data from it is given below along with implementation based on it:

Approach

Program:




import pickle
 
 
def delete_details():
   
    f1 = open("travel.txt", 'rb+')
    travelList = []
    t_place = input("Enter the place to delete :")
 
    while True:
        try:
            L = pickle.load(f1)
            if(L[1] != t_place):
                travelList.append(L)
        except EOFError:
            print("completed deleting details")
            break
 
    f1.seek(0)
    f1.truncate()
 
    for i in range(len(travelList)):
        pickle.dump(travelList[i], f1)
    else:
        f1.close()
 
# reading content in the file.
def read_file():
 
    f = open("travel.txt", 'rb')
    while True:
        try:
            L = pickle.load(f)
            print("Place", L[1], "\t\t Travellers :",
                  L[2], "\t\t Buses :", L[3])
 
        except EOFError:
            print("Completed reading details")
            break
    f.close()
 
 
print("deleting the desired column")
delete_details()
 
print("Reading the file")
read_file()

Output:


Article Tags :