web-dev-qa-db-fra.com

ValueError: protocole de pickle non pris en charge: 3, pickle python2 ne peut pas charger le fichier vidé par python 3 pickle?

J'utilise pickle pour dumper un fichier sur python 3 et j'utilise pickle pour charger le fichier sur python 2, le message ValueError apparaît.

Donc, python 2 cornichon ne peut pas charger le fichier vidé par python 3 cornichon?

Si je le veux? Comment faire?

83
Aleeee

Vous devez écrire les données picklées avec un numéro de protocole inférieur dans Python 3. Python 3 a introduit un nouveau protocole avec le numéro _3_ (et l’utilise par défaut). valeur de _2_ lisible par Python 2.

Vérifiez le paramètre protocol dans pickle.dump . Votre code résultant ressemblera à ceci.

_pickle.dump(your_object, your_file, protocol=2)
_

Il n'y a pas de paramètre protocol dans pickle.load car pickle peut déterminer le protocole à partir du fichier.

129
Matthias

Pickle utilise différents protocols pour convertir vos données en flux binaire.

Vous devez spécifier dans python 3 un protocole inférieur à _3_ pour pouvoir charger les données dans python 2. Vous pouvez spécifier le paramètre protocol. lors de l'appel de pickle.dump .

45
enrico.bacis