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ść, 2którą może odczytać Python 2.
Sprawdź protocolparametr w pickle.dump. Twój wynikowy kod będzie wyglądał następująco.
pickle.dump(your_object, your_file, protocol=2)
Nie ma protocolparametru, pickle.loadponieważ picklemożna określić protokół z pliku.
Pickle używa różnych protocolsdo 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ć protocolparametr podczas wywoływania pickle.dump.
5który został również wprowadzony w Pythonie 3.8, który nie jest kompatybilny z wcześniejszymi wersjami.