Является ли файл 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.
Ответ 3
Может быть, вы не открываете файл в двоичном режиме? См. fooobar.com/questions/390606/...
Ответ 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). Текущая версия, по-видимому, работает по крайней мере для простых случаев в соответствии с моими испытаниями. Однако, по-видимому, некоторые расхождения в списках рассылки были ли в проекте хорошей идеей.