Używam pickle, aby zrzucić plik w Pythonie 3 i używam pickle, aby załadować plik na Pythonie 2, pojawia się ValueError.
Więc python 2 pickle nie może załadować pliku zrzuconego przez python 3 pickle?
Jeśli tego chcę? Jak zrobić?
python
python-3.x
python-2.7
pickle
valueerror
Aleeee
źródło
źródło
Odpowiedzi:
Marynowane dane należy zapisać z niższym numerem protokołu w Pythonie 3. Python 3 wprowadził nowy protokół z numerem
3
(i używa go jako domyślnego), więc przełącz się z powrotem na wartość,2
którą może odczytać Python 2.Sprawdź
protocol
parametr wpickle.dump
. Twój wynikowy kod będzie wyglądał następująco.Nie ma
protocol
parametru,pickle.load
ponieważpickle
można określić protokół z pliku.źródło
Pickle używa różnych
protocols
do konwersji danych do strumienia binarnego.W pytona 2 jest 3 różnych protokołów (
0
,1
,2
) i domyślnie0
.W pytona 3 są 5 różnych protokołów (
0
,1
,2
,3
,4
) i domyślnie3
.Musisz określić w Pythonie 3 protokół niższy niż
3
, aby móc załadować dane w Pythonie 2. Możesz określićprotocol
parametr podczas wywoływaniapickle.dump
.źródło
5
który został również wprowadzony w Pythonie 3.8, który nie jest kompatybilny z wcześniejszymi wersjami.