Я використовую соління, щоб скинути файл на python 3, і я використовую pickle для завантаження файлу на python 2, з'являється ValueError.
Отже, піктограма python 2 не може завантажити файл, скинутий на python 3 pickle?
Якщо я хочу цього? Як зробити?
Я використовую соління, щоб скинути файл на python 3, і я використовую pickle для завантаження файлу на python 2, з'являється ValueError.
Отже, піктограма python 2 не може завантажити файл, скинутий на python 3 pickle?
Якщо я хочу цього? Як зробити?
Відповіді:
Вам слід записати мариновані дані з меншим номером протоколу в Python 3. Python 3 представив новий протокол з номером 3(і використовує його як за замовчуванням), тож переключиться на значення, 2яке може бути прочитане Python 2.
Перевірте protocolпараметр в pickle.dump. Ваш отриманий код буде виглядати приблизно так.
pickle.dump(your_object, your_file, protocol=2)
Немає protocolпараметра в, pickle.loadтому що pickleможе визначити протокол з файлу.
Pickle використовує різні protocolsдля перетворення ваших даних у бінарний потік.
В Python 2 є 3 різних протоколів ( 0, 1, 2) , і за замовчуванням 0.
В Python 3 є 5 різних протоколів ( 0, 1, 2, 3, 4) і за замовчуванням 3.
Ви повинні вказати в python 3 протокол нижче, ніж 3щоб можна було завантажувати дані в python 2. Ви можете вказати protocolпараметр під час виклику pickle.dump.
5який був введений в Python 3.8, а також не сумісний з більш ранніми версіями.