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 valeur2
qui peut être lue par Python 2.Vérifiez le
protocol
paramètre danspickle.dump
. Votre code résultant ressemblera à ceci.Il n'y a pas de
protocol
paramètrepickle.load
carpickle
peut déterminer le protocole à partir du fichier.la source
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 est0
.En python 3 il y a des 5 protocoles différents (
0
,1
,2
,3
,4
) et la valeur par défaut est3
.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 leprotocol
paramètre lors de l'appelpickle.dump
.la source
5
qui a également été introduit dans Python 3.8 qui n'est pas compatible avec les versions antérieures.