Python.. Pickle issue

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • MyrinNew
    Senior Member
    • Feb 2024
    • 5175

    #1

    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()





    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'.




    More...
Working...