3.20 pprint --- Imprime des données joliment

Le module pprint permet d'imprimer ``joliment'' des structures de données Python arbitraires sous une forme qui peut servir de donnée d'entrée à l'interpréteur. Si les structures formatées incluent des objets qui ne sont pas d'un des types fondamentaux de Python, il se peut que la représentation ne puisse pas être chargée. Cela peut être le cas si des objets comme les fichiers, les sockets, les classes, ou des instances sont inclus, ainsi que de nombreux autres objets intégrés qui ne peuvent pas être représentés comme des constantes Python.

La représentation formatée conserve les objets sur une seule ligne si possible, et les répartit sur plusieurs lignes s'ils ne tiennent pas dans la largeur autorisée. Construisez les objets PrettyPrinterexplicitement si vous avez besoin d'ajuster la contrainte de largeur.

Le module pprint définit une classe:

PrettyPrinter(...)
Construit une instance de PrettyPrinter. Ce constructeur peut prendre en compte plusieurs paramètres. Un flux de sortie peut être défini en utilisant le mot-clé stream; la seule méthode appelée sur l'objet flux est la méthode write() du protocole fichier. S'il n'est pas précisé, la classe PrettyPrinter adopte sys.stdout. Trois paramètres supplémentaires peuvent servir à contrôler la représentation formatée. Les mots-clés sont indent, depth, et width. Le nombre de caractères d'indentation défini pour chaque niveau récursif est défini par indent; la valeur par défaut est un. D'autres valeurs peuvent donner au résultat un aspect assez étrange, mais peut faire apparaître les emboîtements plus nettement. Le nombre de niveaux qui peuvent être imprimés est contrôlé par depth; si la structure de données est trop profonde, le niveau imbriqué suivant sera remplacé par "...". Par défaut, il n'y a aucune contrainte sur la profondeur des objets à formater. La largeur voulue pour le résultat est limitée par le paramètre width; par défaut, 80 caractères. Si une structure ne peut pas être formatée à l'intérieur de la contrainte de largeur, le programme fera de son mieux.

>>> import pprint, sys
>>> stuff = sys.path[:]
>>> stuff.insert(0, stuff[:])
>>> pp = pprint.PrettyPrinter(indent=4)
>>> pp.pprint(stuff)
[   [   '',
        '/usr/local/lib/python1.5',
        '/usr/local/lib/python1.5/test',
        '/usr/local/lib/python1.5/sunos5',
        '/usr/local/lib/python1.5/sharedmodules',
        '/usr/local/lib/python1.5/tkinter'],
    '',
    '/usr/local/lib/python1.5',
    '/usr/local/lib/python1.5/test',
    '/usr/local/lib/python1.5/sunos5',
    '/usr/local/lib/python1.5/sharedmodules',
    '/usr/local/lib/python1.5/tkinter']
>>>
>>> import parser
>>> tup = parser.ast2tuple(
...     parser.suite(open('pprint.py').read()))[1][1][1]
>>> pp = pprint.PrettyPrinter(depth=6)
>>> pp.pprint(tup)
(266, (267, (307, (287, (288, (...))))))

La classe PrettyPrinter supporte plusieurs fonctions dérivées:

pformat(objet)
Retourne la représentation formatée de objet sous forme de chaîne de caractères. Les paramètres de formatage par défaut sont utilisés.

pprint(objet[, flux])
Imprime la représentation formatée de objet sur flux, suivi par un saut de ligne. Si flux est omis, sys.stdout est utilisé. On peut s'en servir dans l'interpréteur interactif à la place d'une instruction print pour inspecter des valeurs. Les paramètres de formatage par défaut sont utilisés.

>>> stuff = sys.path[:]
>>> stuff.insert(0, stuff)
>>> pprint.pprint(stuff)
[<Recursion on list with id=869440>,
 '',
 '/usr/local/lib/python1.5',
 '/usr/local/lib/python1.5/test',
 '/usr/local/lib/python1.5/sunos5',
 '/usr/local/lib/python1.5/sharedmodules',
 '/usr/local/lib/python1.5/tkinter']

isreadable(objet)
Détermine si la représentation formatée de objet est ``lisible,'' ou peut servir à reconstruire la valeur avec eval(). Retourne toujours faux pour les objets récursifs.

>>> pprint.isreadable(stuff)
0

isrecursive(objet)
Détermine si objet requiert une représentation recursive.

Une autre fonction support est aussi définie:

saferepr(objet)
Retourne une représentation chaîne de objet, protégée contre les structures de données récursives. Si la représentation de objet contient une entrée récursive, la référence récursive sera représentée comme "<Recursion on nomtype with id=nombre>". A part cela, la représentation n'est pas formatée.

>>> pprint.saferepr(stuff)
"[<Recursion on list with id=682968>, '', '/usr/local/lib/python1.5', '/usr/loca
l/lib/python1.5/test', '/usr/local/lib/python1.5/sunos5', '/usr/local/lib/python
1.5/sharedmodules', '/usr/local/lib/python1.5/tkinter']"


Sous-sections
  1. Objets PrettyPrinter