Menu

Qu'est-ce que le décapage en Python ?

Accueil / Qu'est-ce que le décapage en Python ?

Bonjour, bonsoir

Qu'est-ce que le décapage en Python ?

Posted by GUINARD Maxime le 14/01/22

Le décapage en >Python signifie le processus de sérialisation d'un objet Python dans un flux d'octets. Le module pickle est responsable de la sérialisation et de la désérialisation des objets Python. Qu'est-ce que ça veut dire? eh bien, c'est ce à quoi je vais répondre dans cet article, alors commençons.

Tout d'abord, comprenons ce que signifient la sérialisation et la désérialisation ?

Supposons que vous ayez un objet Python (par exemple, un objet dictionnaire) qui ressemble à ceci :


employé = {"nom": "Bob", "âge": 25} que vous voulez écrire dans un fichier afin qu'un autre processus Python puisse le lire plus tard. Comment peux-tu faire ça?
Eh bien, une option consiste à écrire le dictionnaire sous forme de fichier texte, puis à lire ce fichier texte à partir de l'autre programme Python.
Par exemple, votre fichier texte peut être formaté de la manière suivante : nom : Bob âge : 25 ans
Maintenant, l'autre programme Python peut lire ce fichier, diviser chaque ligne en fonction du délimiteur : et le tour est joué. Voilà!


Alors, qu'est-ce qui ne va pas avec cette approche?
&Je suis d'accord avec vous, c'est une solution de travail et cela peut convenir dans certaines situations.
Cependant, ce n'est pas idéal pour ces deux raisons :
Les fichiers texte occupent plus d'espace lorsqu'ils sont stockés sur disque. Cela peut convenir pour des programmes triviaux, mais imaginez si vous devez envoyer cet objet sérialisé à une autre machine sur le réseau. Dans ce cas, il est crucial d'avoir une petite charge utile, sinon vous risquez de congestionner le réseau.
La façon dont vous avez formaté votre fichier était arbitraire. Vous deviez en quelque sorte communiquer à l'autre programme Python à quoi ressemble votre "schéma". Cela n'évolue pas. Idéalement, nous avons besoin d'un protocole standardisé bien défini afin que tout autre programme puisse lire facilement et de manière déterministe vos données sérialisées.
JSON est une autre norme populaire pour la sérialisation des données. Vous en avez probablement entendu parler.


JSON est un autre protocole textuel largement utilisé, standardisé, mais qui ne résout pas vraiment le problème d'être
une représentation textuelle, ce qui signifie qu'il sera de grande taille.
C'est exactement le problème que le cornichon résout.
Alors, à quoi sert pickle en Python ?
Si vous souhaitez sérialiser un objet Python, que ce soit pour le stocker sur disque ou pour le transférer sur le réseau, pickle est un module Python qui vous aide à sérialiser et désérialiser des objets Python dans un format binaire (et non textuel).
Cela signifie que la taille de vos objets sérialisés sera beaucoup plus compacte que leurs homologues textuels.


Comment décaper un objet Python ?
Voici un exemple de comment décaper un dictionnaire python et l'écrire dans un fichier :
importer des cornichons
e = {"nom": "Bob", "âge": 25}
avec open('employee.pickle', 'wb') comme f :
pickle.dump(e, f)

Notez ce qui suit :
vous devez importer le module pickle
l'objet fichier doit être ouvert en mode "wb" (écriture binaire)
il est recommandé que les fichiers pickle aient une extension .pickle en Python 3, mais ce n'est pas obligatoire
dump() écrit les octets sérialisés du dictionnaire e dans un fichier
Si vous essayez de lire le contenu du fichier pickle, vous obtiendrez ce flux binaire de données qui vous ressemblera à
peu près à du charabia. Mais croyez-moi, ce n'est pas le cas 🙂 $ chat employé.pickle
Comment désépiler un fichier Python ?
Voyons maintenant comment lire le fichier picklé sérialisé à partir d'un autre programme Python.


importer des cornichons avec open('employee.pickle', 'rb') comme f :
e = cornichon.charge(f)

impression(type(e))
imprimer(e)

Maintenant, si vous exécutez ce programme, voici ce que vous obtiendrez :
$ python3 unpickle-example.py
{'nom' : 'Bob', 'âge' : 25}

Magique, hein ? 🙂

Je veux que vous remarquiez ce qui suit :
Est un dictionnaire, exactement le même type qui a été sérialisé dans le programme de décapage
a exactement la même valeur qui a été sérialisée dans le programme de décapage
Alors voilà. Vous avez pu, essentiellement, migrer un dictionnaire d'un programme Python à un autre. Je ne sais pas
pour vous mais je pense que c'est plutôt cool.
Python Pickle est-il rapide ?
C'est une question courante.
Cela dépend de ce à quoi vous le comparez. pickle n'est pas le seul protocole de sérialisation disponible, il y en a beaucoup.


Dans la section suivante, je comparerai pickle à deux autres protocoles de sérialisation très populaires : json et
les tampons de protocole (protobufs).
Je n'entrerai pas dans les détails de la façon dont vous pouvez utiliser json et protobufs pour sérialiser et
désérialiser des objets en Python. Si vous êtes intéressé, vous pouvez consulter cet article pour json, et celui-ci
pour protobufs.
Comparaison entre Pickle, JSON et Protocol Buffers
Dans l'expérience suivante, je comparerai les trois protocoles en fonction de la vitesse de sérialisation et de
désérialisation, en plus de la taille de l'objet sérialisé.
L'objet Python que je vais sérialiser est un dictionnaire Python de 100000000 entrées où chaque entrée est composée
d'une clé entière et d'une valeur entière.


Le tableau suivant montre les résultats de cette expérience :
critères pickle tampons de protocole json vitesse de sérialisation (secondes) 7,05 162 1180
vitesse de désérialisation (secondes) 18 220 1210
taille de l'objet sérialisé 954 Mo 2 Go 1,1 Go

Comme vous pouvez le voir, le cornichon est plus rapide et beaucoup

Qu'est ce que le decapage en python


Discord Development Source
Discord LifeRP
Groupe Steam