3. 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.

3.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
11
# 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("L'argument '{}' n'est pas un entier"
                         .format(sys.argv[1]))
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
    import argparse

    parser = argparse.ArgumentParser(
        usage="%(prog)s [-p/--plot] [-i/--input coordfile | x1,y1 x2,y2 x3,y3]",
        description=__doc__)
    parser.add_argument('coords', nargs='*', type=str, metavar='x,y',
                        help="Coordinates of point")
    parser.add_argument('-i', '--input', nargs='?', type=file,
                        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('--version', action='version', version=__version__)

    args = parser.parse_args()

Cette solution génère automatiquement une aide en ligne, p.ex.:

$ python 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 'x,y' 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
  --version             show program's version number and exit

3.2. [c]Pickle: sérialisation des données

Les modules pickle/cPickle permettent la sauvegarde pérenne d’objets python (« sérialisation »).

>>> d = dict(a=1, b=2, c=3)
>>> l = range(10000)
>>> import cPickle as pickle         # 'cPickle' est + rapide que 'pickle'
>>> pkl = open('archive.pkl', 'w')   # Overture du fichier en écriture
>>> 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')) # 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.

3.3. Batteries included

Quelques modules de la librairie 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
    
  • Interactions avec le système:
    • sys, os: interface système
    • shutil: opérations sur les fichiers (copy, move, etc.)
    • subprocess: éxécution de commandes système
    • glob: méta-caractères du shell (p.ex. toto?.*)

3.4. Text/Graphical User Interfaces