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

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

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

  • pickle/cpickle
  • json
  • jsonpickle
  • xml
  • база данных (как SQLite)

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

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

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

Спасибо, Malcolm

10
задан S.Lott 5 January 2010 в 02:01
поделиться

4 ответа

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

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

.
15
ответ дан 3 December 2019 в 17:59
поделиться
3
ответ дан 3 December 2019 в 17:59
поделиться

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

.
2
ответ дан 3 December 2019 в 17:59
поделиться

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

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

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

2
ответ дан 3 December 2019 в 17:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: