.. _standard: .. _td4: Bibliothèque standard ##################### .. contents:: Table des matières :local: .. 1 Gestion des arguments/options de la ligne de commande 2 Pickle: sérialisation des données 3 *Batteries included* 4 *Text/Graphical User Interfaces* 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. * :ref:`The Python Standard Library ` (v3.x) * `Python Module of the Week `_ (v3.x) .. _optparse: Gestion des arguments/options de la ligne de commande ===================================================== .. rubric:: Utilisation de `sys.argv` .. index:: module: sys Le module :mod:`sys` permet un accès direct aux arguments de la ligne de commande, via la liste :obj:`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.: .. literalinclude:: ../Exercices/crible.py :start-after: start-sys :end-before: end-sys :linenos: .. rubric:: Module `argparse` .. index:: 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 :mod:`argparse`. P.ex.: .. literalinclude:: circonscrit.py :start-after: start-argparse :end-before: end-argparse :linenos: 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 .. _pickle: Pickle: sérialisation des données ================================= .. index:: module: pickle Le module :mod:`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é. *Batteries included* ==================== .. .. index:: .. module: math .. module: cmath .. module: fractions Quelques modules de la bibliothèque standard qui peuvent être d'intérêt: * :mod:`math`: accès aux fonctions mathématiques réelles >>> math.asin(math.sqrt(2) / 2) / math.pi * 180 45.00000000000001 * :mod:`cmath`: accès aux fonctions mathématiques complexes >>> cmath.exp(cmath.pi * 1j) + 1 1.2246467991473532e-16j * :mod:`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 * :mod:`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 * :doc:`autres modules numériques et mathématiques `; .. .. index:: .. module: collections .. module: itertools * :mod:`collections` définit de nouveaux types spécialisés, p.ex. :class:`collections.OrderedDict`, un dictionnaire *ordonné*, ou :class:`collections.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 * :mod:`functools` est une collection d'outils s'appliquant sur des fonctions (mémorisation, fonction partielle, fonction générique, *wrapping*, etc.) * :mod:`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'] .. .. index:: .. module: sys .. module: os .. module: shutil .. module: subprocess .. module: glob * interactions avec le système: - :mod:`sys`, :mod:`os`: interface système, - :mod:`shutil`: opérations sur les fichiers (*copy*, *move*, etc.), - :mod:`subprocess`: éxécution de commandes système, - :mod:`glob`: métacaractères du *shell* (p.ex. `toto?.*`); .. .. index:: .. module: re * :doc:`expressions rationnelles ` (ou *regex*): :mod:`re`; * :mod:`warnings` et :mod:`logging`: gestion des avertissements d'éxécution et mécanismes de *logging* .. .. index:: .. module: time .. module: datetime * gestion du temps (:mod:`time`) et des dates (:mod:`datetime`, :mod:`calendar`); .. .. index:: .. module: gzip .. module: bzip2 .. module: zipfile .. module: tarfile * fichiers compressés et archives: :mod:`gzip`, :mod:`bz2`, :mod:`zipfile`, :mod:`tarfile`; .. .. index:: .. module: cvs .. module: pickle .. module: configparser * lecture et sauvegarde des données (outre :mod:`pickle`): - :mod:`pprint`: affichage « amélioré » d'un objet, - :mod:`csv`: lecture/sauvegarde de fichiers :abbr:`CSV (Comma Separated Values)`, - :mod:`configparser`: fichiers de configuration, - :mod:`json`: *lightweight data interchange format*; .. - yaml: http://pyyaml.org/ .. .. index:: .. module: urllib2 * :doc:`lecture d'une URL ` (p.ex. page web): :mod:`urllib2`. *Text/Graphical User Interfaces* ================================ - :abbr:`TUI (Text User Interface)`: :mod:`curses` - :abbr:`GUI (Graphical User Interface)`: :mod:`tkinter`, .. rubric:: Bibliothèques externes: - TUI: :pypi:`termcolor` (texte coloré ANSII), :pypi:`blessed` (mise en page) - GUI: :rtfd:`pygobject` (GTK3), `PyQt `_ / `pySide `_ (Qt), `wxPython `_ (wxWidgets)