2. Bibliothèque standard🔗
Python dispose d'une très riche bibliothèque de modules étendant les capacités du langage dans de nombreux domaines: nouveaux types de données, interactions avec le système, gestion des fichiers et des processus, protocoles de communication (internet, mail, FTP, etc.), multimédia, etc.
The Python Standard Library (v3.x)
Python Module of the Week (v3.x)
2.1. Gestion des arguments/options de la ligne de commande🔗
Utilisation de sys.argv
Le module sys permet un accès direct aux arguments de la ligne
de commande, via la liste sys.argv: sys.argv[0] contient le
nom du script executé, sys.argv[1] le nom du 1er argument (s'il
existe), etc. P.ex.:
1# Gestion simplifiée d'un argument entier sur la ligne de commande
2import sys
3
4if sys.argv[1:]:
5 # Présence d'au moins un argument sur la ligne de commande (outre le
6 # nom du programme dans sys.argv[0])
7 try:
8 n = int(sys.argv[1]) # Essayer de convertir le 1er argument en entier
9 except ValueError:
10 raise ValueError(f"L'argument {sys.argv[1]!r} n'est pas un entier")
11else: # Pas d'argument sur la ligne de commande
12 n = 101 # Valeur par défaut en l'absence d'argument
Module argparse
Pour une gestion avancée des arguments et/ou options de la ligne de
commande, il est préférable d'utiliser le module argparse.
P.ex.:
1 import argparse
2
3 parser = argparse.ArgumentParser(
4 usage="%(prog)s [-p/--plot] [-i/--input coordfile | x1,y1 x2,y2 x3,y3]",
5 description="Compute the circumscribed circle to 3 points in the plan.",
6 )
7 parser.add_argument(
8 "coords",
9 nargs="*", type=str, metavar="x,y",
10 help="Coordinates of point"
11 )
12 parser.add_argument(
13 "-i", "--input",
14 nargs="?", type=argparse.FileType("r"),
15 help="Coordinate file (one 'x,y' per line)",
16 )
17 parser.add_argument(
18 "-P", "--plot",
19 action="store_true", default=False,
20 help="Draw the circumscribed circle",
21 )
22 parser.add_argument(
23 "-T", "--tests",
24 action="store_true", default=False,
25 help="Run doc tests"
26 )
27 parser.add_argument("--version", action="version", version=__version__)
28
29 args = parser.parse_args()
Cette solution génère automatiquement une aide en ligne, p.ex.:
$ python3 circonscrit.py -h
usage: circonscrit.py [-p/--plot] [-i/--input coordfile | x1,y1 x2,y2 x3,y3]
Compute the circumscribed circle to 3 points in the plan.
positional arguments:
x,y Coordinates of point
optional arguments:
-h, --help show this help message and exit
-i [INPUT], --input [INPUT]
Coordinate file (one 'x,y' per line)
-p, --plot Draw the circumscribed circle
-T, --tests Run doc tests
--version show program's version number and exit
2.2. Pickle: sérialisation des données🔗
Le module pickle permet la sauvegarde pérenne d'objets python
(« sérialisation »).
>>> d = dict(a=1, b=2, c=3)
>>> l = ["Calvin", 6, 1.20]
>>> import pickle
>>> pkl = open('archive.pkl', 'wb') # Overture du fichier en écriture binaire
>>> pickle.dump((d, l), pkl, protocol=-1) # Sérialisation du tuple (d, l)
>>> pkl.close() # *IMPORTANT!* Fermeture du fichier
>>> d2, l2 = pickle.load(open('archive.pkl', 'rb')) # Désérialisation (relecture)
>>> (d == d2) and (l == l2)
True
Attention
les pickles ne sont pas un format d'échange de données. Ils
sont spécifiques à python, et peuvent dépendre de la machine utilisée. Ils
peuvent en outre constituer une faille de sécurité.
2.3. Batteries included🔗
Quelques modules de la bibliothèque standard qui peuvent être d'intérêt:
math: accès aux fonctions mathématiques réelles>>> math.asin(math.sqrt(2) / 2) / math.pi * 180 45.00000000000001
cmath: accès aux fonctions mathématiques complexes>>> cmath.exp(cmath.pi * 1j) + 1 1.2246467991473532e-16j
fractions: définition des nombres rationnels>>> print(fractions.Fraction(2, 3) + fractions.Fraction(5, 6)) 3/2 >>> print(fractions.Fraction(*(3.5).as_integer_ratio())) 7/2
random: générateurs de nombres aléatoires>>> random.sample(range(10), 3) # Échantillon de 3 éléments sans remplacement [9, 1, 6] >>> random.gauss(0, 1) # Distribution normale centrée réduite 0.1245612752121385
collectionsdéfinit de nouveaux types spécialisés, p.ex.collections.OrderedDict, un dictionnaire ordonné, oucollections.namedtuple(), pour la création d'objets simples:>>> Point = collections.namedtuple("Point", "x y") >>> p = Point(3, 4) >>> print(p) Point(x=3, y=4) >>> (p.x**2 + p.y**2)**0.5 5.0
functoolsest une collection d'outils s'appliquant sur des fonctions (mémorisation, fonction partielle, fonction générique, wrapping, etc.)itertoolsfournit des générateurs de boucle (itérateurs) et de combinatoire:>>> [ ''.join(item) for item in itertools.combinations('ABCD', 2) ] ['AB', 'AC', 'AD', 'BC', 'BD', 'CD']
interactions avec le système:
expressions rationnelles (ou regex):
re;Note
Voir regex tester pour un validateur en ligne, et AI Powered Regex Generator.
warningsetlogging: gestion des avertissements d'éxécution et mécanismes de logging
lecture et sauvegarde des données (outre
pickle):csv: lecture/sauvegarde de fichiers CSV,configparser: fichiers de configuration,json: lightweight data interchange format;
lecture d'une URL (p.ex. page web):
urllib.request.
2.4. Text/Graphical User Interfaces🔗
Bibliothèques externes:
GUI: PySide6 (voir ce comparatif).