J'utilise pickle pour vider un fichier sur python 3, et j'utilise pickle pour charger le fichier sur python 2, le ValueError apparaît.
Donc, python 2 pickle ne peut pas charger le fichier vidé par python 3 pickle?
Si je le veux? Comment faire?
J'utilise pickle pour vider un fichier sur python 3, et j'utilise pickle pour charger le fichier sur python 2, le ValueError apparaît.
Donc, python 2 pickle ne peut pas charger le fichier vidé par python 3 pickle?
Si je le veux? Comment faire?
Réponses:
Vous devriez écrire les données décapées avec un numéro de protocole inférieur en Python 3. Python 3 a introduit un nouveau protocole avec le numéro 3
(et l'utilise par défaut), donc revenez à une valeur 2
qui peut être lue par Python 2.
Vérifiez le protocol
paramètre dans pickle.dump
. Votre code résultant ressemblera à ceci.
pickle.dump(your_object, your_file, protocol=2)
Il n'y a pas de protocol
paramètre pickle.load
car pickle
peut déterminer le protocole à partir du fichier.
Pickle utilise différents protocols
pour convertir vos données en un flux binaire.
En python 2 il y a 3 protocoles différents ( 0
, 1
, 2
) et la valeur par défaut est 0
.
En python 3 il y a des 5 protocoles différents ( 0
, 1
, 2
, 3
, 4
) et la valeur par défaut est 3
.
Vous devez spécifier en python 3 un protocole inférieur 3
à pour pouvoir charger les données en python 2. Vous pouvez spécifier le protocol
paramètre lors de l'appel pickle.dump
.
5
qui a également été introduit dans Python 3.8 qui n'est pas compatible avec les versions antérieures.