5. Bibliothèque standard🔗
Table des matières
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)
5.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 2 3 4 5 6 7 8 9 10 | # Gestion simplifiée d'un argument entier sur la ligne de commande
import sys
if sys.argv[1:]: # Présence d'au moins un argument sur la ligne de commande
try:
n = int(sys.argv[1]) # Essayer de lire le 1er argument comme un entier
except ValueError:
raise ValueError(f"L'argument {sys.argv[1]!r} n'est pas un entier")
else: # Pas d'argument sur la ligne de commande
n = 101 # Valeur par défaut
|
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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import argparse
parser = argparse.ArgumentParser(
usage="%(prog)s [-p/--plot] [-i/--input coordfile | x1,y1 x2,y2 x3,y3]",
description="Compute the circumscribed circle to 3 points in the plan.")
parser.add_argument('coords', nargs='*', type=str, metavar='x,y',
help="Coordinates of point")
parser.add_argument('-i', '--input', nargs='?', type=argparse.FileType('r'),
help="Coordinate file (one 'x,y' per line)")
parser.add_argument('-P', '--plot', action="store_true", default=False,
help="Draw the circumscribed circle")
parser.add_argument('-T', '--tests', action="store_true", default=False,
help="Run doc tests")
parser.add_argument('--version', action='version', version=__version__)
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
5.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é.
5.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
collections
dé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
functools
est une collection d’outils s’appliquant sur des fonctions (mémorisation, fonction partielle, fonction générique, wrapping, etc.)itertools
fournit 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:
shutil
: opérations sur les fichiers (copy, move, etc.),subprocess
: éxécution de commandes système,glob
: métacaractères du shell (p.ex.toto?.*
);
expressions rationnelles (ou regex):
re
;warnings
etlogging
: gestion des avertissements d’éxécution et mécanismes de logging
lecture et sauvegarde des données (outre
pickle
):pprint
: affichage « amélioré » d’un objet,csv
: lecture/sauvegarde de fichiers CSV,configparser
: fichiers de configuration,json
: lightweight data interchange format;
lecture d’une URL (p.ex. page web):
urllib2
.