2008-09-18 9 views
16

Al trabajar con python de forma interactiva, a veces es necesario mostrar un resultado que es una estructura de datos arbitrariamente compleja (como listas con listas incrustadas, etc.) La forma predeterminada de mostrarlos es solo un volcado lineal masivo que se repite una y otra vez y debes analizar detenidamente para leerlo.¿Hay una impresora bonita para datos de Python?

Hay algo que tomará cualquier objeto python y lo mostrará de una manera más racional. p.ej.

[0, 1, 
    [a, b, c], 
    2, 3, 4] 

en lugar de:

[0, 1, [a, b, c], 2, 3, 4] 

Yo sé que no es un ejemplo muy bueno, pero creo que se entiende la idea.

Respuesta

24
from pprint import pprint 
a = [0, 1, ['a', 'b', 'c'], 2, 3, 4] 
pprint(a) 

Tenga en cuenta que para una lista corta como mi ejemplo, pprint imprimirá todo en una línea. Sin embargo, para estructuras más complejas, hace un trabajo bastante bueno con datos de impresión bonitos.

+0

nice! gracias. – Ferruccio

3

Otra buena opción es usar IPython, que es un entorno interactivo con muchas características adicionales, que incluyen impresión bonita automática, métodos de finalización de pestañas, fácil acceso al shell y mucho más. También es muy fácil de instalar.

IPython tutorial

+1

Para el registro, creo que IPython usa pprint para imprimir cosas, por lo que si desea imprimir cosas como IPython en su propio programa, quiere pprint. –

+0

Bueno, también puede importar un shell ipython en su programa. Señalo ipython porque tiene muchas otras funciones útiles además de la impresión bonita. –

10

Somtimes YAML puede ser bueno para esto.

import yaml 
a = [0, 1, ['a', 'b', 'c'], 2, 3, 4] 
print yaml.dump(a) 

Produce:

- 0 
- 1 
- [a, b, c] 
- 2 
- 3 
- 4 
8

Además de pprint.pprint, pprint.pformat es muy útil para hacer legibles __repr__ s. Mi complejo __repr__ generalmente se ve así:

def __repr__(self): 
    from pprint import pformat 

    return "<ClassName %s>" % pformat({"attrs":self.attrs, 
             "that_i":self.that_i, 
             "care_about":self.care_about}) 
+0

pprint (x) es solo "print pformat (x)", por lo que puede tener acceso a lo que imprime pprint como una cadena. muy útil a veces – Rory

Cuestiones relacionadas