DEV Community

Aravind Sree U
Aravind Sree U

Posted on

Python.. Pickle issue

I JUST WANNA KNOW WHY THAT UNPICKLING ERROR RAISES. BUT NOT IN PREVIOUS CASES

Program:
import pickle

def create():
fo = open("binary.dat", "wb")
count = int(input("Enter number of records: "))
for i in range(count):
roll = int(input("Enter roll no: "))
name = input("Enter name: ")
class_name = input("Enter class: ")
data = [roll, name, class_name]
pickle.dump(data, fo)
fo.close()

def check():
fo = open("binary.dat","rb+")
search = int(input("Enter roll.no to search: "))
name = input("Enter name to update: ")
try:
while True:
rpos = fo.tell()
data = pickle.load(fo)
if data[0] ==search:
data[1] = name
fo.seek(rpos)
pickle.dump(data, fo)
#fo.truncate()

except EOFError:
    fo.close()
Enter fullscreen mode Exit fullscreen mode

def readall():
with open("binary.dat", "rb") as fo:
try:
while True:
data = pickle.load(fo)
print(data)
except EOFError:
pass

create()
readall()
check()
readall()

output:

rvd@betaceti:~/Projects$ /home/rvd/Projects/.venv/bin/python /home/rvd/Projects/POCs/class.py
Enter number of records: 2
Enter roll no: 1
Enter name: er
Enter class: 12
Enter roll no: 2
Enter name: we
Enter class: 12
[1, 'er', '12']
[2, 'we', '12']
Enter roll.no to search: 1
Enter name to update: kjsn
[1, 'kjsn', '12']
[2, 'we', '12']
rvd@betaceti:~/Projects$ /home/rvd/Projects/.venv/bin/python /home/rvd/Projects/POCs/class.py
Enter number of records: 1
Enter roll no: 1
Enter name: s
Enter class: 12
[1, 's', '12']
Enter roll.no to search: 1
Enter name to update: zdrtgh
[1, 'zdrtgh', '12']
rvd@betaceti:~/Projects$ /home/rvd/Projects/.venv/bin/python /home/rvd/Projects/POCs/class.py
Enter number of records: 2
Enter roll no: 1
Enter name: s
Enter class: 12
Enter roll no: 2
Enter name: er
Enter class: 12
[1, 's', '12']
[2, 'er', '12']
Enter roll.no to search: 1
Enter name to update: dfrgdr
Traceback (most recent call last):
File "/home/rvd/Projects/POCs/class.py", line 42, in
check()
File "/home/rvd/Projects/POCs/class.py", line 21, in check
data = pickle.load(fo)
^^^^^^^^^^^^^^^
_pickle.UnpicklingError: invalid load key, '\x00'.

Top comments (0)