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ć?
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ć?
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 w pickle.dump
. Twój wynikowy kod będzie wyglądał następująco.
pickle.dump(your_object, your_file, protocol=2)
Nie ma protocol
parametru, pickle.load
ponieważ pickle
można określić protokół z pliku.
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ślnie 0
.
W pytona 3 są 5 różnych protokołów ( 0
, 1
, 2
, 3
, 4
) i domyślnie 3
.
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ływania pickle.dump
.
5
który został również wprowadzony w Pythonie 3.8, który nie jest kompatybilny z wcześniejszymi wersjami.