2009-12-04 2 views
13

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

+32

Python рассол, возможно, колючий. Проблемы с планшетами потенциально предотвратимы. Представьте возможное предложение по предотвращению проблем, пожалуйста. – aehiilrs

ответ

23

Пиренейский маринад прекрасно подходит для кросс-платформенного использования.

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

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

+0

'pickle' [гарантированно« обратно совместим »] (http://docs.python.org/2/library/pickle.html#relationship-to-other-python-modules). Я предполагаю, что это означает, что более новые версии будут читать соленые огурцы из более старых версий, но более старые версии, возможно, не смогут читать огурцы из более новых версий. – max

0

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

+0

Не downvoting, но использование json для этой ситуации кажется неловким. – ChristopheD

+1

Это действительно зависит от того, что он спасает. Если это все списки чисел и строк, JSON замечательный. Если это словари и экземпляры классов, не так много. – steveha

+0

Я сохраняю экземпляры классов – vikithakar

9

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

4

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

Если вы используете рассол в качестве механизма передачи данных, вы можете рассмотреть вопрос о менее реализации конкретных форматов для хранения данных, таких как JSON, XML, CSV, YAML и т.д.

0

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

Смежные вопросы