Является ли файл pickle python кросс-платформенным?

Я создал небольшой python script. Я сохранил файл pickle на Linux, а затем использовал его в Windows, а затем снова использовал его в Linux, но теперь этот файл не работает в Linux, но он отлично работает на окнах. Является ли это то, что python является платформой coss, но файл pickle - нет. Есть ли какое-либо решение для этого?

Ответы

Ответ 1

Python pickle отлично кросс-платформенный.

Это, вероятно, связано с различиями EOL (End-Of-Line) между Windows и Linux. Убедитесь, что вы открываете файлы рассола в двоичном режиме как при их записи, так и при их чтении, используя режимы open() "wb" и "rb" соответственно.

Примечание. Передача соленья между различными версиями Python может вызвать проблемы, поэтому попробуйте иметь ту же версию на обеих платформах.

Ответ 2

Модуль pickle поддерживает несколько разных форматов данных. Если вы укажете конкретный формат рассола вместо использования значения по умолчанию (0), вы можете столкнуться с кросс-платформенными проблемами двоичного файла. Вы можете использовать простые файлы рассола ASCII, указав протокол 0.

Ответ 4

Pickle должен быть кросс-платформенным, существуют проблемы с версиями/протоколами (см. http://docs.python.org/library/pickle.html#data-stream-format), но в целом, если вы используя тот же выпуск python на ваших окнах и unix-боксах, они должны быть совместимы.

Если вы используете pickle в качестве механизма переноса данных, вам может потребоваться рассмотреть менее конкретные форматы хранения данных, такие как json, xml, csv, yaml и т.д.

Ответ 5

Вы можете использовать json вместо pickle. Если он может сохранить ваши данные, вы знаете, что это кросс-платформа.

Ответ 6

Одна интересная идея - PyON (обозначение объекта Python). Текущая версия, по-видимому, работает по крайней мере для простых случаев в соответствии с моими испытаниями. Однако, по-видимому, некоторые расхождения в списках рассылки были ли в проекте хорошей идеей.