Outils pour utilisateurs

Outils du site


issue145: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
issue145:python [2019/06/08 08:13] d52frissue145:python [2019/06/11 11:21] (Version actuelle) auntiee
Ligne 1: Ligne 1:
 **There are times when you need a number of variables initialized at startup based on the last time the program ran. In the world of Windows, this is usually saved in a configuration file with a ".ini" extension. There are a number of ways to do this. One would be an XML file or even a database. However, both of these are often overkill and not quick and easy solutions. There is a library that can help us, however, in Python.** **There are times when you need a number of variables initialized at startup based on the last time the program ran. In the world of Windows, this is usually saved in a configuration file with a ".ini" extension. There are a number of ways to do this. One would be an XML file or even a database. However, both of these are often overkill and not quick and easy solutions. There is a library that can help us, however, in Python.**
  
-Il y a des fois où vous avez besoin qu'un certain nombre de variables soient initialisées au démarrage en vous basant sur la dernière fois où le programme a tourné. Dans le monde de Windows, c'est en général enregistré dans un fichier de configuration avec l'extension « .ini ». Il y a de multiples façons de le faire. Ce pourrait être un fichier XML ou même une base de données. Cependant, ces deux solutions sont souvent ex&g&res et des solutions ni rapides ni faciles. Un bibliothèque en Python peut, cependant, vous aider.+Il y a des fois où vous avez besoin qu'un certain nombre de variables soient initialisées au démarrage en vous basant sur la dernière fois où le programme a tourné. Dans le monde de Windows, c'est en général enregistré dans un fichier de configuration avec l'extension « .ini ». Il y a de multiples façons de le faire. Ce pourrait être un fichier XML ou même une base de données. Cependant, ces deux solutions sont souvent exagérées, et ni rapides ni faciles. Une bibliothèque en Python peut, cependant, vous aider.
  
 **Installation **Installation
Ligne 19: Ligne 19:
 Installation Installation
  
-La bibliothèque est configparser, et est facile à installer avec pip :+La bibliothèque est configparser, qui est facile à installer avec pip :
  
 pip3 install configparser pip3 install configparser
  
-Notez que j'ai utilisé pip3 plutôt que pip. Si vous utilisez toujours Python 2, vous devrez utiliser pip, mais, comme Python 2.x arrivera en fin de vie le 1er janvier 2020, j'ai décidé de n' utiliser désormais que la syntaxe de Python 3.x. La version actuelle est la 3.7.4 (d'après le site PyPI - https://pypi.org/project/configparser/) et la dernière mise à jour date du 22 mars 2019.  Cette version est compatible avec Python 2.6, jusqu'à Python 3.7. Une version précédente pour 2.6-3.5 existait, appelée ConfigParser, qui était là depuis de nombreuses années. Si vous voulez utiliser l'ancienne version, vous pouvez l'importer directement comme un backport :+Notez que j'ai utilisé pip3 plutôt que pip. Si vous utilisez toujours Python 2, vous devrez utiliser pip, mais, comme Python 2.x arrivera en fin de vie le 1er janvier 2020, j'ai décidé de n'utiliser désormais que la syntaxe de Python 3.x. La version actuelle est la 3.7.4 (d'après le site PyPI - https://pypi.org/project/configparser/) et la dernière mise à jour date du 22 mars 2019. Cette version est compatible avec Python 2.6, jusqu'à Python 3.7. Une version précédente existait pour les 2.6-3.5, appelée ConfigParser, qui est là depuis de nombreuses années. Si vous voulez utiliser l'ancienne version, vous pouvez l'importer directement comme un backport :
  
 from backports import configparser from backports import configparser
  
-Autrement, vous l'importerez comme habituellement :+Autrement, vous l'importerez normalement :
  
 import configparser import configparser
Ligne 39: Ligne 39:
 Utilisation Utilisation
  
-Le fichier INI (qui n'est PAS compatible avec le format de fichier « officiel » .ini de Windows) est un simple fichier texte. Vous pouvez utiliser l'extension .ini ou .cfg, ou ce que vous voulez. Dans ce tutoriel, cependant, j'utiliserai .ini comme extension. Ce fichier est composé d'entrées clé/valeur qui sont groupées par section qui sont marquées avec une entête [block]. Par défaut, les noms de section sont sensibles à la casse, mais pas les clés. Les blancs de début et de fin sont supprimés des clés comme des valeurs. Le fichier de configuration peut aussi contenir des commentaires qui sont, par défaut, seulement sur une ligne vide. Les commentaires alignés peuvent être utilisés, mais peuvent causer des problèmes ; aussi, je vous suggère de ne pas les utiliser. Comme en Python, les commentaires commencent avec un « # ».+Le fichier INI (qui n'est PAS compatible avec le format de fichier « officiel » .ini de Windows) est un simple fichier texte. Vous pouvez utiliser l'extension .ini ou .cfg, ou ce que vous voulez. Dans ce tutoriel, cependant, j'utiliserai .ini comme extension. Ce fichier est composé d'entrées clé/valeur qui sont groupées par sections qui sont marquées avec une entête [block]. Par défaut, les noms de section sont sensibles à la casse, mais pas les clés. Les blancs de début et de fin sont supprimés des clés comme des valeurs. Le fichier de configuration peut aussi contenir des commentaires qui sont, par défaut, seulement sur une ligne vide. Les commentaires alignés peuvent être utilisés, mais peuvent causer des problèmes ; aussi, je vous suggère de ne pas les utiliser. Comme en Python, les commentaires commencent par un « # ».
  
-Une idée très grossière de la disposition du fichier .ini pourrait être quelque chose comme ceci...+Une idée très grossière de la disposition du fichier .ini pourrait être quelque chose comme ceci :
  
 **[Animals] **[Animals]
Ligne 61: Ligne 61:
 The library doesn't try to guess what datatype a variable is. It always stores them internally as string.** The library doesn't try to guess what datatype a variable is. It always stores them internally as string.**
  
-[Animals] +[Animals] # Animaux 
-animal1 = Frog +animal1 = Frog # Grenouille 
-animal2 = Dog +animal2 = Dog # Chien 
-animal3 = Hog+animal3 = Hog # Porc
  
-[Trees] +[Trees] # Arbres 
-tree1 = The Larch +tree1 = The Larch # Mélèze 
-tree2 = Elm +tree2 = Elm # Orme 
-tree3 = Ash+tree3 = Ash # Frêne
  
-Dans cet exemple, nous avons deux sections, « Animals » et « Trees ». Chaque section contient trois variables (animal1, animal 2, etc.) qui sont nos clés et chacune a une valeur. Vous pouvez aussi définir un clé sans valeur par défaut :+Dans cet exemple, nous avons deux sections, « Animals » et « Trees ». Chaque section contient trois variables (animal1, animal 2, etc.) qui sont nos clés et chacune a une valeur. Vous pouvez aussi définir une clé sans valeur par défaut :
  
 tree4 = tree4 =
Ligne 77: Ligne 77:
 Cependant, quand vous utilisez la variable « tree4 », c'est une chaîne vierge, et pas None (rien). Cependant, quand vous utilisez la variable « tree4 », c'est une chaîne vierge, et pas None (rien).
  
-La bibliothèque n'essaie pas de deviner quel est le type de variable. Elle les stocke toujours en interne comme des chaînes.+La bibliothèque n'essaie pas de deviner quel est le type d'une variable. Elle les stocke toujours en interne comme des chaînes.
  
 **The Code **The Code
Ligne 95: Ligne 95:
 import configparser import configparser
  
-Dans ce simple programme de démo, nous n'avons besoin que de deux imports, os et configparser. Nous verrons dans un moment pourquoi nous voulons la bibliothèque os. Maintenant, nous définirons une variable globale « iniFineName, qui contient le nom de fichier de notre fichier ini.+Dans ce simple programme de démo, nous n'avons besoin que de deux imports, os et configparser. Nous verrons dans un moment pourquoi nous voulons la bibliothèque os. Maintenant, nous définirons une variable globale « iniFileName, qui contient le nom de fichier de notre fichier ini.
  
 **global iniFileName **global iniFileName
Ligne 129: Ligne 129:
 This next bit of code (top right) shows how we can view the various sections and key/value sets.** This next bit of code (top right) shows how we can view the various sections and key/value sets.**
  
-Nous définissons un certain nombre de variables globales juste pour faciliter les choses. Ensuite, nous vérifions pour voir si le fichier existe (la méthode os.path.isfile()) etpuis lire le fichier :+Nous définissons un certain nombre de variables globales pour faciliter les choses. Ensuite, nous vérifions pour voir si le fichier existe (la méthode os.path.isfile()), puis nous lisons le fichier :
  
 if os.path.isfile(iniFileName): if os.path.isfile(iniFileName):
Ligne 135: Ligne 135:
 ini.read(iniFileName) ini.read(iniFileName)
  
-Ce prochain morceau de code (en haut à droite) montre comment nous pouvons voir les diverses sections et les ensembles clé/valeur.+Le prochain morceau de code (en haut à droite) montre comment nous pouvons voir les diverses sections et les ensembles clé/valeur.
  
 **Now we can assign the values to the proper variables: **Now we can assign the values to the proper variables:
Ligne 219: Ligne 219:
         config.write(configfile)         config.write(configfile)
                  
-Cette fonction (page suivante, en haut à droite) est simplement utilisée pour afficher toutes les variables qui ont été tirées du fichier INI.+Cette fonction (page suivante, en haut à droite) est utilisée pour afficher toutes les variables qui ont été tirées du fichier INI.
  
-C'est dans la fonction init() (page suivante, en bas à droite) que tout le travail effectif s'opère : nous instantions l'objet configparser comme « ini », lisons le fichier INI et vérifions pour voir si nous recevons « True » (il est là) ou « False » (nous devons en créer un à partir des valeurs par défaut) ; dans ce cas, nous essayons de le lire à nouveau, montrons les variablespuis nous mettons à jour une valeur (tree4) puis réécrivons la variable modifiée dans le fichier.+C'est dans la fonction init() (page suivante, en bas à droite) que tout le travail effectif s'opère : nous instancions l'objet configparser comme « ini », lisons le fichier INI et vérifions pour voir si nous recevons « True » (il est là) ou « False » (nous devons en créer un à partir des valeurs par défaut) ; dans ce cas, nous essayons de le lire à nouveau, montrons les variables puis mettons à jour une valeur (tree4) et, ensuite, nous réécrivons la variable modifiée dans le fichier.
  
-**Finally, we have our "if __name__" entry point to our program which calls the init() function, and when it's done, notify the user that we are all done:**+**Finally, we have our "if __name__" entry point to our program which calls the init() function, and when it's done, notify the user that we are all done:
  
 if __name__ == '__main__': if __name__ == '__main__':
Ligne 253: Ligne 253:
 Program End** Program End**
  
-Enfin, nous avons notre point d'entrée « if __name__ » dans notre programme qui appelle la fonction init()et quand c'est fait, notifie l'utilisateur que tout a été fait :+Enfin, nous avons notre point d'entrée « if __name__ » dans notre programme qui appelle la fonction init() etquand c'est fait, notifie à l'utilisateur que tout est terminé :
  
 if __name__ == '__main__': if __name__ == '__main__':
Ligne 281: Ligne 281:
 What's the answer to Life, The Universe and Everything? 42 What's the answer to Life, The Universe and Everything? 42
 theanswer type is <class 'str'> theanswer type is <class 'str'>
-Program End**+Program End
  
 **Notice that the value for "tree4" is blank. If, however, you look at the INI file, it looks like this: **Notice that the value for "tree4" is blank. If, however, you look at the INI file, it looks like this:
Ligne 323: Ligne 323:
 Until next time, keep coding and have a great month! ** Until next time, keep coding and have a great month! **
  
-C'est parce que la dernière ligne de al fonction init() met à jour la variable « tree4 » avec la valeur Birtch (bouleau) dans la fonction write_ini().+C'est parce que la dernière ligne de la fonction init() met à jour la variable « tree4 » avec la valeur Birch (bouleau) dans la fonction write_ini().
  
-Je n'ai pas été cherché trop loin dans les possibilités de cette bibliothèque, mais si vous voulez en apprendre davantage, vous pouvez lire à son propos dans la documentation officielle de Python sur configparser à https://docs.python.org/3/library/configparser.html.+Je n'ai pas cherché trop loin dans les possibilités de cette bibliothèque, mais si vous voulez en apprendre davantage, vous pouvez lire sur configparser dans la documentation officielle de Python  à https://docs.python.org/3/library/configparser.html.
  
 J'ai mis l'exemple de code de ce mois sur pastebin à https://pastebin.com/X37remDa. J'ai mis l'exemple de code de ce mois sur pastebin à https://pastebin.com/X37remDa.
issue145/python.1559974434.txt.gz · Dernière modification : 2019/06/08 08:13 de d52fr