2011-02-25 40 views
9

¿Cuál es la mejor manera de imprimir datos tabulares en Python? Supongamos que los datos están en una lista 2D y quiero crear una tabla de aspecto inteligente. Lo que realmente tengo es una lista de diccionarios y quiero imprimir una intersección según los valores en los diccionarios. Algo así comoImprimir datos tabulares en Python

for val1 in my_dict: 
    for val2 in my_dict: 
    if val1['a'] > val2['a']: 
     print 'x' 

pero de tal manera que cada columna tenga un ancho fijo. Las clases Writter y Formatter parecen algo en el ámbito de la posibilidad, pero aún parecen complejas de usar cuando se comparan, por ejemplo, con el formateador de Perl.

¿Hay alguna implementación existente o tengo que escribir la mía?

+0

Creo que es posible que desee probar pprint (sí, dos 'p'). No lo uso pero he visto a otros usarlo en situaciones similares y, por lo tanto, suena una campana aquí – inspectorG4dget

+0

He visto pprint, pero no veo cómo usarlo de la manera que necesito. – Makis

+0

El posible duplicado tiene más votos y respuestas: http://stackoverflow.com/questions/9535954/python-printing-lists-as-tabular-data. Siempre dé ejemplos de salida deseados explícitos =) –

Respuesta

9

¿Conoces PyPi?

DataGrid y PrettyTable parecen dos buenas alternativas que encontré con una búsqueda breve. Puede que tenga que reunir los datos en el formato que desee (con "x" cuando su condición sea verdadera) antes de enviarlos a las rutinas provistas.

13
print "%20s" % somevar 

Imprimirá el valor 'somevar' y usará hasta 20 espacios. Añadir una coma detrás de la sentencia de impresión con el fin de evitar la ruptura del verso - y, por supuesto: leer el string formatting operations docs en el operador '%'

6

Aquí hay dos maneras de escribir una tabla de cuadrados y cubos:

for x in range(1, 11): 
    print repr(x).rjust(2), repr(x*x).rjust(3),print repr(x*x*x).rjust(4) 

for x in range(1,11): 
    print '{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x) 

Compruebe this para más detalles.

0

Tabulate es otro paquete que aún no se ha mencionado para manejar este tipo de tarea. Una buena característica es que funciona muy bien con Pandas DataFrames.