Лучший способ сохранить сложные структуры данных Python во время сеансов программы (pickle, json, xml, database, other)

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

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

  • рассол /cpickle
  • JSON
  • jsonpickle
  • XML
  • (например, SQLite)

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

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

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

Спасибо, Malcolm

Ответ 1

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

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

Ответ 3

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

Ответ 4

Каковы ваши критерии "наилучшего"?

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

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