I'm trying to learn how to use the pickle
module in Python:
import pickle x = 123 f = open('data.txt','w') pickle.dump(x,f)
Here's what I get:
Traceback (most recent call last): File "D:\python\test.py", line 5, in <module> pickle.dump(x,f) TypeError: must be str, not bytes
However, this code works just fine:
import pickle dump = pickle.dump(123) print(dump)
What am I doing wrong?
Python Pickle dump dump() function to store the object data to the file. pickle. dump() function takes 3 arguments. The first argument is the object that you want to store.
The advantage of using pickle is that it can serialize pretty much any Python object, without having to add any extra code. Its also smart in that in will only write out any single object once, making it effective to store recursive structures like graphs.
First, import pickle to use it, then we define an example dictionary, which is a Python object. Next, we open a file (note that we open to write bytes in Python 3+), then we use pickle. dump() to put the dict into opened file, then close. Use pickle.
“Pickling” is the process whereby a Python object hierarchy is converted into a byte stream, and “unpickling” is the inverse operation, whereby a byte stream (from a binary file or bytes-like object) is converted back into an object hierarchy.
The problem is that you're opening the file in text mode. You need to use binary here:
>>> f = open('data.txt','w') >>> pickle.dump(123,f) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: must be str, not bytes >>> >>> f = open('data.txt','wb') >>> pickle.dump(123,f) >>>
The write method for file-like objects, only accept a single string argument. The dumps method in the pickle module automatically casts arguments as strings, whereas the the dump method will write a pickled representation of the object to the open file. Since 123 is not a string it throws the TypeError error.
This is acknowledged in pickle.dump documentation.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With