Лучший способ сохранить сложные структуры данных Python между сеансами программы (Pickle, JSON, XML, базы данных, другие) - PullRequest
10 голосов
/ 05 января 2010

Нужны советы по наилучшей методике сохранения сложных структур данных Python во время сеансов программы.

Вот список техник, которые я придумала до сих пор:

  • рассол / cpickle
  • 1008 * JSON *
  • jsonpickle
  • XML
  • база данных (например, SQLite)

Pickle - это самый простой и быстрый метод, но я понимаю, что нет никакой гарантии, что вывод pickle будет работать в различных версиях Python 2.x / 3.x или в 32- и 64-битных реализациях Python.

Json работает только для простых структур данных. Jsonpickle, кажется, исправляет это и, кажется, написано для работы в разных версиях Python.

Сериализация в XML или в базу данных возможна, но требует дополнительных усилий, поскольку нам пришлось бы выполнять сериализацию самостоятельно.

Спасибо, Malcolm

Ответы [ 4 ]

15 голосов
/ 05 января 2010

У вас неправильное представление о соленьях: они гарантированно работают во всех версиях Python. Вам просто нужно выбрать версию протокола, которая поддерживается всеми версиями Python, которые вас интересуют.

Техника, которую вы пропустили, - это маршал, который не гарантированно работает во всех версиях Python (и, кстати, так пишутся файлы .pyc).

3 голосов
/ 05 января 2010
2 голосов
/ 01 февраля 2010

Каковы ваши критерии для "лучших"?

  • pickle может делать большинство структур Python, в том числе глубоко вложенных
  • sqlite dbs можно легко запросить (если вы знаете sql:)
  • скорость / память? не верь никаким контрольным показателям, которые ты сам не притворялся.

(мелкий шрифт:
cPickle.dump (protocol = -1) сжимает, в одном случае 15M pickle / 60M sqlite, но может сломаться.
Строки, которые встречаются много раз, например названия стран могут занимать больше памяти, чем вы ожидаете; см. встроенного интерна ().
)

2 голосов
/ 05 января 2010

Вы смотрели на PySyck или pyYAML ?

...