Quelle est la différence entre cornichon et shelve?
-
29-09-2019 - |
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?
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]
.