Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
pickle problem
#6
Pickling is just a way to serialize a data structure. If you are using it for data storage it makes sense you would data = pickle.load(file), modify data, pickle.dump(data, file).

EXAMPLE 1
import pickle

animals = ["tiger", "lion", "giraffe"]
pickled = pickle.dumps(animals)
print(pickled)

things = pickle.loads(pickled)
animals = things + ["cow", "sheep", "pig"]
pickled = pickle.dumps(animals)
print(pickled)
things = pickle.loads(pickled)
print(things)
Output:
b'\x80\x04\x95\x1e\x00\x00\x00\x00\x00\x00\x00]\x94(\x8c\x05tiger\x94\x8c\x04lion\x94\x8c\x07giraffe\x94e.' b'\x80\x04\x952\x00\x00\x00\x00\x00\x00\x00]\x94(\x8c\x05tiger\x94\x8c\x04lion\x94\x8c\x07giraffe\x94\x8c\x03cow\x94\x8c\x05sheep\x94\x8c\x03pig\x94e.' ['tiger', 'lion', 'giraffe', 'cow', 'sheep', 'pig']
It does not make sense appending to a pickled file. You are concatenating pickles.

EXAMPLE 2
import pickle

animals = ["tiger", "lion", "giraffe"]
pickled = pickle.dumps(animals)
print(pickled)
things = pickle.loads(pickled)
print(things)

pickled = pickled + pickle.dumps(["cow", "sheep", "pig"])
print(pickled)
things = pickle.loads(pickled)
print(things)
Output:
b'\x80\x04\x95\x1e\x00\x00\x00\x00\x00\x00\x00]\x94(\x8c\x05tiger\x94\x8c\x04lion\x94\x8c\x07giraffe\x94e.' ['tiger', 'lion', 'giraffe'] b'\x80\x04\x95\x1e\x00\x00\x00\x00\x00\x00\x00]\x94(\x8c\x05tiger\x94\x8c\x04lion\x94\x8c\x07giraffe\x94e.\x80\x04\x95\x19\x00\x00\x00\x00\x00\x00\x00]\x94(\x8c\x03cow\x94\x8c\x05sheep\x94\x8c\x03pig\x94e.' ['tiger', 'lion', 'giraffe']
Appending to "pickled" makes it longer, but it is not properly formatted to make a longer list.

Or are you trying to save multiple data structures to a pickle file?

EXAMPLE 3
import pickle

jungle = ["tiger", "lion", "giraffe"]
farm = ["cow", "sheep", "pig"]

with open("test.bin", "wb") as file:
    pickle.dump(jungle, file)

with open("test.bin", "ab") as file:  # Appending to an existing pickle file
    pickle.dump(farm, file)

with open("test.bin", "rb") as file:
    while True:
        try:
            print(pickle.load(file))  # Need to call pickle.load() for each pickle.dump() used to make the file
        except EOFError:
            break
Output:
['tiger', 'lion', 'giraffe'] ['cow', 'sheep', 'pig']
I don't see this as being particularly useful, but there may be a special case where this makes sense. Usually if you want to pickle multiple data structures you put them in a list and pickle the list.

EXAMPLE 4
import pickle

jungle = ["tiger", "lion", "giraffe"]
farm = ["cow", "sheep", "pig"]

with open("test.bin", "wb") as file:
    pickle.dump([jungle, farm], file)


with open("test.bin", "rb") as file:
    a, b = pickle.load(file)
print(a, b)
Output:
['tiger', 'lion', 'giraffe'] ['cow', 'sheep', 'pig']
Is Gribouillis the learned colleague? I found the link here:

https://python-forum.io/thread-38018.htm...ght=pickle

I don't know if this is one of the "special cases" where it makes sense to append to a "pickled" file. As shown in EXAMPLE 3, you'll need to call pickle.load() multiple times if you called pickle.dump() multiple times, or used pickle.dump() to append to an existing file.
Reply


Messages In This Thread
pickle problem - by DPaul - Sep-26-2022, 09:22 AM
RE: pickle problem - by buran - Sep-26-2022, 10:24 AM
RE: pickle problem - by DPaul - Sep-26-2022, 02:44 PM
RE: pickle problem - by buran - Sep-26-2022, 03:15 PM
RE: pickle problem - by DPaul - Sep-26-2022, 05:17 PM
RE: pickle problem - by deanhystad - Sep-26-2022, 09:47 PM
RE: pickle problem - by DPaul - Sep-27-2022, 06:10 AM
RE: pickle problem - by Gribouillis - Sep-27-2022, 07:41 AM
RE: pickle problem - by DPaul - Sep-27-2022, 08:49 AM
RE: pickle problem - by Gribouillis - Sep-27-2022, 09:35 AM
RE: pickle problem - by DPaul - Sep-27-2022, 02:38 PM
RE: pickle problem - by Gribouillis - Sep-27-2022, 03:43 PM
RE: pickle problem - by deanhystad - Sep-27-2022, 04:18 PM
RE: pickle problem - by DPaul - Sep-27-2022, 05:25 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  TypeError: cannot pickle ‘_asyncio.Future’ object Abdul_Rafey 1 594 Mar-07-2024, 03:40 PM
Last Post: deanhystad
  TypeError: cannot pickle n00sferatu 1 2,736 Dec-14-2021, 03:52 PM
Last Post: yakkaligiri
  Multiprocessing Can't pickle local object law 1 16,435 Aug-30-2021, 02:49 PM
Last Post: law
  Save/Loading using pickle Scordomaniac 4 3,149 Nov-24-2020, 06:11 PM
Last Post: Scordomaniac
  computing entropy using pickle files baran01 2 2,509 Dec-30-2019, 09:45 PM
Last Post: micseydel
  Tkinter don't get ver from file via pickle storzo 2 2,639 Jul-31-2019, 03:50 PM
Last Post: storzo
  pickle docs say bytes in one place, strings in another Skaperen 2 2,221 Jul-29-2019, 05:13 PM
Last Post: Skaperen
  pickle error SheeppOSU 4 11,127 Apr-20-2019, 04:50 PM
Last Post: SheeppOSU
  Using pickle.dump Friend 1 3,024 Feb-15-2019, 04:39 PM
Last Post: metulburr
  I'm having trouble with an OOP version of Pickle functionality CodeWolf 2 2,452 Dec-19-2018, 05:41 PM
Last Post: CodeWolf

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020