Question

J'apprends sur la sérialisation d'objet pour la première fois. Je lis et essayé de « googler » des différences dans les modules décaper et shelve mais je ne suis pas sûr que je comprends. Quand utiliser lequel? Pickle peut transformer chaque objet python dans le flux d'octets qui peut être persisté dans un fichier. Alors, pourquoi avons-nous besoin shelve module? Pickle pas plus vite?

Était-ce utile?

La solution

pickle est pour sérialiser un objet (ou les objets) en un seul flot d'octets dans un fichier.

shelve construit au-dessus de pickle et met en œuvre un dictionnaire de sérialisation où les objets sont décapés, mais associée à une clé (une chaîne), de sorte que vous pouvez charger votre fichier de données et accéder à vos rayonné objets marinées via des clés. Cela pourrait être plus pratique vous deviez être sérialisation d'objets.

Voici un exemple d'utilisation entre les deux. (Devrait fonctionner dans les dernières versions de Python 2.7 et Python 3.x).

pickle Exemple

import pickle

integers = [1, 2, 3, 4, 5]

with open('pickle-example.p', 'wb') as pfile:
    pickle.dump(integers, pfile)

videra la liste integers à un fichier binaire appelé pickle-example.p.

Maintenant, essayez de lire le dos de fichier décapé.

import pickle

with open('pickle-example.p', 'rb') as pfile:
    integers = pickle.load(pfile)
    print integers

Le [1, 2, 3, 4, 5] de sortie doit ci-dessus.

shelve Exemple

import shelve

integers = [1, 2, 3, 4, 5]

# If you're using Python 2.7, import contextlib and use
# the line:
# with contextlib.closing(shelve.open('shelf-example', 'c')) as shelf:
with shelve.open('shelf-example', 'c') as shelf:
    shelf['ints'] = integers

Remarquez comment ajouter des objets à la tablette via dictionnaire comme l'accès.

Lire le retour d'objets avec du code comme suit:

import shelve

# If you're using Python 2.7, import contextlib and use
# the line:
# with contextlib.closing(shelve.open('shelf-example', 'r')) as shelf:
with shelve.open('shelf-example', 'r') as shelf:
    for key in shelf.keys():
        print(repr(key), repr(shelf[key])))

La sortie sera 'ints', [1, 2, 3, 4, 5].

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top