Outils pour utilisateurs

Outils du site


issue152:python

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
issue152:python [2020/01/03 19:23] d52frissue152:python [2020/01/04 14:34] (Version actuelle) auntiee
Ligne 5: Ligne 5:
 One thing that I've found is that when you need to (or want to) save some of the data in the middle of a process, often the pickle library is used. I've known about pickle for a long time, but have really never messed with it much, so I thought I'd explore some.** One thing that I've found is that when you need to (or want to) save some of the data in the middle of a process, often the pickle library is used. I've known about pickle for a long time, but have really never messed with it much, so I thought I'd explore some.**
  
-Dernièrement, j'ai fait travaillé un peu dans un éditeur de livre électronique sur l'Apprentissage Machine et Python. C'est un sujet très intéressant et j'ai vraiment apprécié le processus d'apprentissage sur toutes les différentes méthodes de modélisation.+Dernièrement, j'ai travaillé un peu avec un éditeur de livre électronique sur l'Apprentissage Machine et Python. C'est un sujet très intéressant et j'ai vraiment apprécié le processus d'apprentissage sur toutes les différentes méthodes de modélisation.
  
 Voulez-vous des cornichons avec ? Voulez-vous des cornichons avec ?
  
-Une chose que j'ai découvert est que vous avez besoin de (ou que vous voulez) sauvegarder des données au milieu du processus, la bibliothèque pickle (cornichon) est utilisée. Je m'étais renseigné sur pickle il y a longtemps mais je ne m'étais pas jamais beaucoup battu avec lui ; aussi, je me suis dit que je devrais l'explorer un peu.+Une chose que j'ai découverte est que, si vous avez besoin de (ou si vous voulez) sauvegarder des données au milieu du processus, la bibliothèque pickle (cornichon) est utilisée. Je connais pickle depuis longtempsmais je ne me suis jamais beaucoup mesuré à lui ; aussi, je me suis dit que je devrais l'explorer un peu.
  
 **Pickle or olive? **Pickle or olive?
Ligne 19: Ligne 19:
 Cornichon ou olive ? Cornichon ou olive ?
  
-Une olive est un élément merveilleux dans le martini. Elle ne fait rien pour le code Python. C'est, cependant, une variété non vénimeuse de python en Australie.+Une olive est un élément merveilleux dans le martini. Elle ne fait rien pour le code Python. C'est, cependant, une variété non venimeuse de python en Australie.
  
-D'un autre côté, pickle est une méthode pour sérialiser et dés-érialiser des structures objet de python. Si vous connaissez déjà tout ce qu'il faut savoir sur Pickles, n'hésitez pas à sauter plus avant dans l'article. Sinon, ou si vous pensez que je peux vous apprendre quelque chose, continuez la lecture. +En revanche, pickle est une méthode pour sérialiser et -sérialiser des structures objet de python. Si vous connaissez déjà tout ce qu'il faut savoir sur Pickles, n'hésitez pas à sauter plus avant dans l'article. Sinon, ou si vous pensez que je peux vous apprendre quelque chose, continuez la lecture. 
  
 **Serializing means to take an object from memory, convert it into a stream of bytes that can be stored on disk. De-serializing is the reverse of the process. Let's say you have a dictionary. You can't just dump it to disk from memory. You have to convert it into a format that lends itself to being a disk file. JSON, XML, HTML all jump to mind. Pickles are just another way to do this. There's a library that handles all the tough stuff for you. **Serializing means to take an object from memory, convert it into a stream of bytes that can be stored on disk. De-serializing is the reverse of the process. Let's say you have a dictionary. You can't just dump it to disk from memory. You have to convert it into a format that lends itself to being a disk file. JSON, XML, HTML all jump to mind. Pickles are just another way to do this. There's a library that handles all the tough stuff for you.
Ligne 27: Ligne 27:
 What can you pickle? Well most Python objects can be pickled, but there are a few that can't. While you can pickle simple objects (Integers, floats, complex numbers and strings), you normally would pickle Tuples, Lists, sets and Dictionaries that are built from most objects. However, things like generators, lambda functions and defaultdicts can not be pickled. There are some workarounds, but this is pretty much the rule of thumb.** What can you pickle? Well most Python objects can be pickled, but there are a few that can't. While you can pickle simple objects (Integers, floats, complex numbers and strings), you normally would pickle Tuples, Lists, sets and Dictionaries that are built from most objects. However, things like generators, lambda functions and defaultdicts can not be pickled. There are some workarounds, but this is pretty much the rule of thumb.**
  
-« Sérialiser » signifie prendre un objet en mémoire et le convertir en un flux de bits que vous pouvez sauvegarder sur disque. Dé-sérialiser est le processus inverse. Disons que nous avons un dictionnaire. Vous ne pouvez pas le passer en bloc de la mémoire au disque. Vous devez le convertir dans un format qui l'améne à devenir une fichier sur le disque. JSON, XML, HTML viennent immédiatement à l'esprit. Pickles est simplement un autre façon de le faire. Une bibliothèque existe qui gère pour vous tout ce bazar touffu.+« Sérialiser » signifie prendre un objet en mémoire et le convertir en un flux de bits que vous pouvez sauvegarder sur disque. Dé-sérialiser est le processus inverse. Disons que nous avons un dictionnaire. Vous ne pouvez pas le passer en bloc de la mémoire au disque. Vous devez le convertir dans un format qui l'amène à devenir un fichier qui ira sur le disque. JSON, XML, HTML viennent immédiatement à l'esprit. Pickle est simplement une autre façon de le faire. Une bibliothèque existe qui gère pour vous tout ce bazar touffu.
  
-Qu'est-ce que vous pouvez « pickler » ? Eh bien ! La plupart des objets en Python peuvent être « picklés » mais quelques-uns ne peuvent pas l'être. Alors que vous pouvez utiliser pickles sur des objets simples (nombres entiers, flottants ou complexes, et chaînes), vous pourrez utiliser pickles normalement sur des tuples, des listes, des ensembles e t des dictionnaires qui sont construits avec la plupart des objets. Cependant, les choses comme des générateurs, des fonctions lambda et des defaultdics ne peuvent pas être « picklées ». Il y a des contournements, mais c'est un peu au doigt mouillé.+Qu'est-ce que vous pouvez « pickler » ? Eh bien ! La plupart des objets en Python peuvent être « picklés » mais quelques-uns ne peuvent pas l'être. Alors que vous pouvez utiliser pickle sur des objets simples (nombres entiers, flottants ou complexes, et chaînes), vous utiliserez pickle normalement sur des tuples, des listes, des ensembles et des dictionnaires qui sont construits avec la plupart de ces objets. Cependant, les choses comme des générateurs, des fonctions lambda et des defaultdics ne peuvent pas être « picklées ». Il y a des contournements, mais c'est généralement le cas.
  
 **Pickling Process **Pickling Process
Ligne 41: Ligne 41:
 Processus pour « pickler » Processus pour « pickler »
  
-Je veux remercier mon ami norvégien Halvard Tislavoll pour l'idée et le code de cet article.+Je veux remercier mon ami norvégien Halvard Tislavoll pour l'idée et le code de cette partie de l'article.
  
-Disons que vous voulez créer un jeu de couleurs qui pourraient être utilisées pour créer une interface utilisateur graphique (GUI). Tkinter (comme d'autres boîtes à outils pour les GUI) vous permet d'utiliser des codes hexadécimaux et des noms de couleurs. De nombreuses pages Web existent qui présentent toutes les couleurs avec leurs noms pour un recherche rapide ; mais, qu'en est-il si vous avez besoin d'elles toutes avec leurs codes hexadécimaux ?+Disons que vous voulez créer un jeu de couleurs qui pourraient être utilisées pour créer une interface utilisateur graphique (GUI). Tkinter (comme d'autres boîtes à outils pour les GUI) vous permet d'utiliser des codes hexadécimaux et des noms de couleurs. De nombreuses pages Web existent qui présentent toutes les couleurs avec leurs noms pour un recherche rapide ; mais, qu'en est-il si vous avez besoin de ces noms accompagnés de leurs codes hexadécimaux ?
  
-Sous Ubuntu, il existe un fichier situé dans le dossier /etc/x11, appelé rgb.txt. Faites-en une copie et mettez-la dans votre dossier de travail.+Sous Ubuntu, il existe un fichier situé dans le dossier /etc/x11, appelé rgb.txt. Faites-en une copie et mettez-le dans votre dossier de travail.
  
 **Please note that Halvard's coding style is not the same as mine and I'm sure that it's not the same as yours. However, I'm sure that you will be able to understand his code. **Please note that Halvard's coding style is not the same as mine and I'm sure that it's not the same as yours. However, I'm sure that you will be able to understand his code.
Ligne 58: Ligne 58:
 myDict = {}** myDict = {}**
  
-Notez, s'il vous plaît, que le style de codage de Halvard n'est pas le même que le mien et je suis sûr qu'il n'est pas le même que le votre. Cependant, je suis sûr que vous saurez comprendre son code.+Notez, s'il vous plaît, que le style de codage de Halvard n'est pas le même que le mien et je suis sûr qu'il n'est pas le même que le vôtre. Cependant, je suis sûr que vous saurez comprendre son code.
  
-Maintenant, nous pouvons commencer à créer un programme pour convertir ce texte en dictionnaire puis le traiter avec pickle. Nommez « rgb2pickle.py » votre fichier de programme. D'abord, vous avez besoin d'importer la bibliothèque pickle+Maintenant, nous pouvons commencer à créer un programme pour convertir ce texte en dictionnairepuis le traiter avec pickle. Nommez votre fichier de programme « rgb2pickle.py ». D'abord, vous devez importer la bibliothèque pickle :
  
 import pickle import pickle
  
-Maintenant, définissons une liste vide et un dictionnaire vide...+Maintenant, définissons une liste vide et un dictionnaire vide :
  
 myList = [] myList = []
Ligne 91: Ligne 91:
         B = emptystring(B)**         B = emptystring(B)**
                  
-Ensuite, nous voudrons créer quelques fonctions support. D'abord, la fonction qui lira le fichier rgb.txt et retournera le contenu sous forme de liste (voir page suivante, en haut à droite).+Ensuite, nous créerons quelques fonctions support. D'abord, la fonction qui lira le fichier rgb.txt et retournera le contenu sous forme de liste (voir page suivante, en haut à droite).
  
-Cette fonction prend la liste et met tout dans un dictionnaire...+Cette fonction prend la liste et met tout dans un dictionnaire :
  
 def txt2dict(myList): def txt2dict(myList):
Ligne 132: Ligne 132:
     return aDict**     return aDict**
          
-Maintenant, convertissons les valeurs RGB en valaeur hexadécimale...+Maintenant, convertissons les valeurs RGB en valeur hexadécimale :
          
 # convertir la valeur dec2hex # convertir la valeur dec2hex
Ligne 141: Ligne 141:
 H = f"#{H1}{H2}{H3}" H = f"#{H1}{H2}{H3}"
  
-Et rajoutons cela à la structure en liste et mettons à jour le dictionnaire...+Et rajoutons cela à la structure en liste et mettons à jour le dictionnaire :
  
 # faire une liste avec une nouvelle structure en colonnes # faire une liste avec une nouvelle structure en colonnes
Ligne 166: Ligne 166:
     data = pkl.load(f)**     data = pkl.load(f)**
  
-Maintenant que toutes fonctions d'aide sont faites, rassemblons-les (page suivante, en haut à droite).+Maintenant que toutes les fonctions d'aide sont faites, rassemblons-les (page suivante, en haut à droite).
  
-La sortie sur le terminal est très intéressante et répond très rapidement. Maintenantnous avons un fichier pickle ; que faire avec lui ?+La sortie sur le terminal est très intéressante et répond très rapidement. Maintenant nous avons un fichier pickle ; que faire avec lui ?
  
 « Dé-pickler » un pickle « Dé-pickler » un pickle
  
-Dé-pickler (ou dé-sérialiser), c'est simplement aussi facile que de créer le fichier ickle une fois que vos données sont prêtes.+Dé-pickler (ou dé-sérialiser) est tout aussi facile que de créer le fichier pickle une fois que vos données sont prêtes.
  
-Voici un rapide bout de code que nous pouvons utiliser dans une pappli en ligne de commande...+Voici un rapide bout de code que nous pouvons utiliser dans une appli en ligne de commande :
  
 with open(filename, 'rb') as f: with open(filename, 'rb') as f:
Ligne 185: Ligne 185:
 I won’t bore you with the details of how to do this in Page, since there’s only three buttons, an entry widget, two labels, and a scrolled text widget. We’ve already covered that. However, I will show you the code that is important in the _support file. I really didn’t worry about any error checking for the simple project.** I won’t bore you with the details of how to do this in Page, since there’s only three buttons, an entry widget, two labels, and a scrolled text widget. We’ve already covered that. However, I will show you the code that is important in the _support file. I really didn’t worry about any error checking for the simple project.**
  
-Ça marche bien seulement si le fichier pickle a été créé avec Python 3. Cependant, si il a été créé avec Python 2 et la routine cPickle, il a des chances de sortir une erreur. Une solution de repli facile est (voir en bas à droite).+Ça marche bien seulement si le fichier pickle a été créé avec Python 3. Cependant, s'il a été créé avec Python 2 et la routine cPickle, il a des chances de sortir une erreur. Une solution de repli facile est (voir en bas à droite).
  
-De toute manière, pour les besoins, je voulais être capable de voir vraiment les données sous une forme brute, directement depuis le fichier pickle. J'ai fait rapidement un rapide formulaire Page et l'ai mis dans très peu de code (MERCI Page !) et voici le résultat...+De toute manière, pour mes besoins, je voulais être capable en fait de voir les données sous une forme brute, directement depuis le fichier pickle. J'ai fait un rapide formulaire Page et ai mis très peu de code (MERCI Page !) et voici le résultat :
  
-Je ne vous ennuie pas avec les détails de comment le faire dans Page, car il n'y a que trois boutons, un gadget de saisie, deux étiquettes et un gadget de liste déroulante. Nous en avons déjà parlé. Cependant, je vous montrerai le code qui est important dans le fichier _support. Je ne me suis proccupé d'aucune vérication d'erreur pour ce projet simple.+Je ne vous ennuierai pas avec les détails de comment le faire dans Page, car il n'y a que trois boutons, un gadget de saisie, deux étiquettes et un gadget de liste déroulante. Nous en avons déjà parlé. Cependant, je vous montrerai le code qui est important dans le fichier _support. Je ne me suis préoccupé d'aucune vérication d'erreur pour ce projet simple.
  
 **We’ll look at the callback for the “get filename” button (the one that has “...” as its text) first (middle right). Basically, this simply calls a tkinter askopenfilename filedialog and puts the selected filename and path into the entry widget for display. **We’ll look at the callback for the “get filename” button (the one that has “...” as its text) first (middle right). Basically, this simply calls a tkinter askopenfilename filedialog and puts the selected filename and path into the entry widget for display.
Ligne 200: Ligne 200:
 • Fill the text widget with the data from the structure (if possible).** • Fill the text widget with the data from the structure (if possible).**
  
-Nous regarderons d'abord la fonction de rappel pour le bouton « fet filename » (celui qui a « ... » comme texte)(en haut au milieu). En gros, ceci appelle simplement un dialogue de fichier tkinter askopenfilename et met le fichier sélectionné et son chemin dans le gadget de saisie, pour affichage.+Nous regarderons d'abord la fonction de rappel pour le bouton « get filename » (celui qui a « ... » comme texte)(en haut au milieu). En gros, cela appelle simplement un dialogue de fichier tkinter askopenfilename et met le fichier sélectionné et son chemin dans le gadget de saisie, pour affichage.
  
 Ensuite, vient la fonction de rappel pour le bouton « GO ». C'est ici que le vrai travail se fait. La logique est de : Ensuite, vient la fonction de rappel pour le bouton « GO ». C'est ici que le vrai travail se fait. La logique est de :
Ligne 206: Ligne 206:
 ••Ouvrir le fichier que l'utilisateur a sélectionné dans la routine ci-dessus. ••Ouvrir le fichier que l'utilisateur a sélectionné dans la routine ci-dessus.
 ••Le dé-pickler  ••Le dé-pickler 
-••Déterminer le type de la strucutre de données et l'afficher. +••Déterminer le type de la structure de données et l'afficher. 
-••Remplir le gadget de texte avec la données dans la structure (si possible).+••Remplir le gadget de texte avec les données de la structure (si possible).
  
  
Ligne 230: Ligne 230:
     clear_stw()  # Effacer le gadget texte     clear_stw()  # Effacer le gadget texte
  
-Voici est le vrai code pour dépickler (page suivante, en haut à droite)+Voici le vrai code pour dépickler (page suivante, en haut à droite).
  
 Enfin, basé sur le type de données que nous avons, remplissez le gadget de texte (en bas à droite). Enfin, basé sur le type de données que nous avons, remplissez le gadget de texte (en bas à droite).
  
-La fonction pour effacer le gadget de texte est vraiment simple...+La fonction pour effacer le gadget de texte est vraiment simple :
  
 def clear_stw(): def clear_stw():
-    # Clear the ScrolledText Widget+    # Effacer le gadget ScrolledText
     w.Scrolledtext1.delete('1.0', 'end')     w.Scrolledtext1.delete('1.0', 'end')
  
Ligne 250: Ligne 250:
  
 That’s it.** That’s it.**
 +
 +Et la toute dernière chose, juste pour être complet, est la fonction fournie par Page qui définit les variables tkinter qui permettent un paramétrage facile du texte pour les différents gadgets :
 +
 +def set_Tk_var():
 +    global pickleType
 +    pickleType = tk.StringVar()
 +    pickleType.set('')
 +    global entry_var
 +    entry_var = tk.StringVar()
 +
 +Et c'est tout.
  
 **Here is a good website that can help you understand the pickling process if you still want to learn more... https://www.datacamp.com/community/tutorials/pickle-python-tutorial **Here is a good website that can help you understand the pickling process if you still want to learn more... https://www.datacamp.com/community/tutorials/pickle-python-tutorial
Ligne 258: Ligne 269:
  
 Until next time, I hope you have a wonderful New Year and remember to keep coding!** Until next time, I hope you have a wonderful New Year and remember to keep coding!**
 +
 +Voici un bon site Web qui peut vous aider à comprendre le processus de pickling si vous voulez en apprendre plus...https://www.datacamp.com/community/tutorials/pickle-python-tutorial
 +
 +J'ai mis les fichiers source du fichier rgb2pickle.py venant de Halvard sur pastebin à : https://pastebin.com/s09mp72G
 +
 +Et les sources Python pour le programme de dé-pickling en interface graphique sont aussi à : 
 +Depickle.py - https://pastebin.com/wsUMqk1F
 +Depickle_support.py - https://pastebin.com/TgmgngxJ
 +
 +En attendant la prochaine fois, je vous souhaite un merveilleux Nouvel An et n'oubliez pas de continuer à coder !
  
issue152/python.1578075825.txt.gz · Dernière modification : 2020/01/03 19:23 de d52fr