3.25 pprint -- Modulo per la stampa dei dati in forma elegante

Il modulo pprint fornisce la possibilità di stampare ``elegantemente'' strutture arbitrarie di dati Python in una forma che può venire usata come input per l'interprete. Se le strutture formattate contengono oggetti che non sono dei tipi Python fondamentali, la rappresentazione potrebbe non essere utilizzabile. Questo potrebbe verificarsi nel caso in cui vengano inclusi oggetti come file, socket, classi o istanze, cosi come molti altri oggetti built-in non rappresentabili come costanti Python.

La rappresentazione formattata se può tiene gli oggetti su una singola riga, altrimenti se questa non rientra nella larghezza consentita, la spezza in righe multiple. Costruite esplicitamente oggetti PrettyPrinter se avete bisogno di aggiustare il limite della larghezza.

Il modulo pprint definisce una classe:

class PrettyPrinter( ...)
Costruisce un'istanza PrettyPrinter. Questo costruttore accetta diversi parametri chiave. Può definirsi un flusso di output utilizzando la parola chiave stream; il solo metodo usato sull'oggetto stream è il protocollo dei file, il metodo write(). Se non specificato, PrettyPrinter utilizza sys.stdout. Per controllare la rappresentazione formattata, possono venire usati tre parametri aggiuntivi. Le parole chiave sono indent, depth e width. L'incremento di indentazione che viene aggiunto per ogni livello ricorsivo viene specificato da indent; il suo valore predefinito è uno. Altri valori possono rendere l'aspetto dell'output un po' irregolare, ma ciò può rendere più facilmente riconoscibili gli annidamenti. Il numero dei livelli che possono venire stampati è controllato da depth; se la struttura di dati da stampare è troppo profonda, il successivo livello contenuto viene sostituito da "...". Non esiste un limite predefinito sulla profondità degli oggetti che devono essere formattati. La larghezza desiderata dell'output viene definita usando il parametro width; il suo valore predefinito è otto caratteri. Se non si riesce a formattare una struttura nell'intervallo di lunghezza voluto, si dovrà fare uno sforzo maggiore.

>>> 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 supporta diverse funzioni derivate:

pformat( object[, indent[, width[, depth]]])
Restituisce la rappresentazione formattata di object come una stringa. indent, width e depth verranno passati al costruttore PrettyPrinter come parametri di formattazione. Modificato nella versione 2.4: Vengono aggiunti i parametri indent, width e depth.

pprint( object[, stream[, indent[, width[, depth]]]])
Stampa la rappresentazione formattata di object su stream, seguito da un carattere di fine riga. Se stream viene omesso, verrà usato sys.stdout. Questo può venire usato nell'interprete interattivo al posto di un'istruzione print per esaminare i valori. indent, width e depth verranno passati come parametri di formattazione, al costruttore PrettyPrinter.

>>> 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']
Modificato nella versione 2.4: Vengono aggiunti i parametri indent, width e depth.

isreadable( object)
Determina se la rappresentazione formattata di object è ``readable'', (NdT: ``leggibile'') oppure può venire utilizzato per ricostruire il valore, usando eval(). Questa restituisce sempre falso per gli oggetti ricorsivi.

>>> pprint.isreadable(stuff)
False

isrecursive( object)
Determina se object richiede una rappresentazione ricorsiva.

Viene inoltre definita un'ulteriore funzione di supporto:

saferepr( object)
Restituisce una rappresentazione in forma di stringa di object, protetta da strutture dati ricorsive. Se la rappresentazione di object presenta un inserimento ricorsivo, allora il riferimento ricorsivo verrà rappresentato come "<Recursion on typename with id=number>". La rappresentazione non viene altrimenti formattata.

>>> 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']"



Subsections
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.