Вам доведеться розповісти, pickle.load()
як перетворити дані про тестування Python в рядки Python 3, або ви можете pickle
залишити їх у байтах.
За замовчуванням - спробувати розшифрувати всі рядкові дані як ASCII, і це декодування не вдалося. Дивіться pickle.load()
документацію :
Додатковими аргументами ключових слів є fix_imports , кодування та помилки , які використовуються для управління підтримкою сумісності потоку маринованих сигналів, згенерованого Python 2. Якщо true_imports вірно, pickle спробує зіставити старі імена Python 2 з новими іменами, які використовуються в Python 3. The кодування та помилки підказують маринуванню, як розшифрувати 8-бітові рядкові екземпляри, вибрані Python 2; ці значення за замовчуванням - "ASCII" і "строго" відповідно. Кодування може бути «байт» , щоб прочитати ці 8-бітову рядок примірників , як байти об'єктів.
Встановлення кодування latin1
дозволяє імпортувати дані безпосередньо:
with open(mshelffile, 'rb') as f:
d = pickle.load(f, encoding='latin1')
але вам потрібно буде перевірити, що жодна з ваших рядків не декодується за допомогою неправильного кодека; Latin-1 працює на будь-який вхід, оскільки він відображає значення байтів 0-255 до перших 256 кодових точок Unicode безпосередньо.
Альтернативою було б завантаження даних encoding='bytes'
і декодування bytes
після цього всіх ключів та значень.
Зауважте, що до версій Python до 3.6.8, 3.7.2 та 3.8.0datetime
, вилучення даних об’єкта Python 2 порушено, якщо ви не використовуєте encoding='bytes'
.
json
модуль Python 2.4 ? Можливо, ви могли б написати сценарій 2.4, який видаляє об'єкт і зберігає його як json-об’єкт, а потім написати 3.4-скрипт, який читає json-об’єкт і зберігає його як 3.4-сумісний об’єкт маринування. Це була б разова операція, яку ви виконуєте на всіх ваших файлах підбору.