2010-11-05 3 views
1

En termes simples, qu'est-ce que la "sérialisation", et pourquoi en ai-je besoin? J'ai lu l'article de Wikipédia, mais je ne comprends toujours pas. Pourquoi ai-je besoin de convertir des données en une séquence de bits pour les stocker dans un fichier? Je suis spécifiquement concerné par l'utilisation du module pickle de Python pour faire la sérialisation.Pickle Python Sérialisation

Merci pour le temps!

Répondre

2

Vous pouvez enregistrer l'état d'un programme (d'objets spécifiques). Imaginez que vous avez un programme qui dure plusieurs heures ou même plusieurs jours. En utilisant pickle vous pouvez sauvegarder l'état du calcul, tuer le programme et reprendre le calcul plus tard si vous le souhaitez.

Vous pouvez même envoyer les objets enregistrés par courrier électronique à d'autres personnes, qui peuvent ensuite reprendre le calcul ou consulter vos résultats.

Il m'arrive parfois de déceler les préférences des utilisateurs ou (dans un quiz) quelles questions ont été posées la dernière fois et quelles réponses ont été données.

+0

Pouvez-vous définir "État du programme". Que signifie l'état? @votre exemple (que j'apprécie beaucoup): Vous voulez dire par ex. une boucle qui s'exécute par exemple 1.000.000 et je peux arrêter à 500.000 et que reprendre? Est-ce que c'est ça? – MacPython

+0

Vous pouvez sécuriser des objets, vous pouvez dans votre exemple sécuriser le compteur. Les générateurs ne sont pas sélectionnables. Mais si vous vouliez approcher un point zéro d'une fonction en utilisant Newton-Approximation, vous pourriez sauvegarder votre résultat le plus récent et le recharger plus tard pour faire un autre millier de cycles. –

1

Permettez-moi d'essayer d'expliquer en utilisant quelques exemples ...

Vous devez passer un dictionnaire à un autre processus de python qui court de votre environnement de python (peut-être un autre projet ou sur une autre machine) ..

somelist = {1:1,2:2,3:3} 

Comment pouvez-vous transmettre ce dictionnaire à ce processus? Vous ne pouvez le convertir en chaîne, même si vous avez fait, vous ne pouvez pas le convertir à sa forme originale ...

Si vous Pickle ce dictionnaire il vous donnera

dumps({1: 1, 2: 2, 3: 3}) 
'(dp1\nI1\nI1\nsI2\nI2\nsI3\nI3\ns.' 

qui a une chaîne semblable Structure ... Alors vous pouvez envoyer ce par la poste, ou quelque chose d'autre ... et le récepteur peut unpickle pour obtenir l'objet original ...

loads('(dp1\nI1\nI1\nsI2\nI2\nsI3\nI3\ns.') 
{1: 1, 2: 2, 3: 3} 
+0

Pour cette tâche 'json',' yaml' ou 'xml' pourrait être une meilleure alternative: n'étant pas spécifique à python, ils sont lisibles avec n'importe quel langage informatique moderne. json/yaml a l'avantage d'une meilleure lisibilité par les humains et xml est probablement plus adapté aux structures compliquées. Les bibliothèques json et xml sont livrées avec une distribution standard python. –

0

Un programme qui produit des statistiques, mais pas trop de sorte que l'utilisation de DB est exagérée. Par exemple, l'analyse comparative d'un programme pour choisir le meilleur algorithme.

Une fois terminé, il trace un graphique. Maintenant, vous pourriez ne pas aimer la façon dont le graphique est dessiné. Vous décapez les résultats, puis décuplez dans un autre script (peut-être après quelques tests de performances ultérieurs) et affinez la visualisation comme vous le souhaitez.

Questions connexes