10
votes

Meilleur moyen d'enregistrer des structures de données Python complexes à travers les sessions de programme (Pickle, Json, XML, Base de données, Autre)

À la recherche de conseils sur la meilleure technique pour économiser des structures de données complexes Python à travers les sessions de programme.

Voici une liste de techniques que j'ai proposées jusqu'à présent:

  • Pickle / CPICKLE
  • JSON
  • JSONPICKLE
  • XML
  • base de données (comme SQLite)

    Pickle est la technique la plus facile et la plus rapide, mais ma compréhension est que rien ne garantit que la sortie de cornichon fonctionnera dans diverses versions de Python 2.x / 3.x ou sur des implémentations 32 et 64 bits de Python.

    JSON fonctionne uniquement pour des structures de données simples. Jsonpickle semble corriger cela et semble être écrit pour travailler à travers différentes versions de Python.

    Serializing to XML ou à une base de données est possible, mais représente des efforts supplémentaires puisque nous devrions faire la sérialisation nous-mêmes manuellement.

    merci, Malcolm


0 commentaires

4 Réponses :


15
votes

Vous avez une idée fausse sur les cornichons: ils sont garantis pour travailler à travers les versions de Python. Vous devez simplement choisir une version de protocole supportée par toutes les versions Python que vous aimez.

La technique que vous avez laissée de côté est le maréchal, qui n'est pas garantie de fonctionner à travers les versions Python (et BTW, est la façon dont les fichiers .pyc sont écrits).


1 commentaires

Ned: Merci d'avoir souligné ma confusion entre le décapage et la maréchalation.



3
votes

Vous avez laissé tomber le maréchal et SLAVE Modules.

Aussi ce Python Docs Page couvre la persistance


1 commentaires

Spliff: Merci pour le lien avec la page Web Python Persistance.



2
votes

Avez-vous regardé PYSYCK ou pyyaml ​​?


1 commentaires

MichroLson: J'avais oublié Pyyaml. On dirait qu'un compromis intéressant entre JSON (ne fonctionne pas avec des structures de données complexes) et un cornichon. Avez-vous examiné le projet JSONPICKLE. Très impressionnant aussi bien.



2
votes

Quels sont vos critères pour "meilleurs"?

  • cornichon peut faire la plupart des structures python, profondément imbriquées aussi
  • SQLite DBS peut être facilement interrogé (si vous connaissez SQL :)
  • vitesse / mémoire? ne faites pas confiance à des points de repère que vous ne vous êtes pas monté.

    (imprimé fin:
    CPICKLE.DUMP (protocole = -1) comprime, dans une case 15m Pickle / 60m SQLite, mais peut casser.
    Cordes qui se produisent plusieurs fois, par ex. Les noms de pays peuvent prendre plus de mémoire que prévu; Voir le stagiaire intégré ().
    )


1 commentaires

Denis: Merci pour votre avertissement sur le protocole = -1 et le sens de l'humour (RE: ne faites pas confiance aux points de repère que vous ne vous êtes pas façonné ... LMAO!)