tabulate tablas instalar imprimir funcion ejemplos como python

tablas - Salida tabular del formato Python



modulo tabulate python (6)

Esta pregunta ya tiene una respuesta aquí:

Utilizando python2.7, estoy tratando de imprimir en la pantalla de datos tabulares.

Esto es más o menos a lo que se parece mi código:

for i in mylist: print "{}/t|{}/t|".format (i, f(i))

El problema es que, según la longitud de i o f(i) los datos no estarán alineados.

Esto es lo que obtendré:

|foo |bar | |foobo |foobar |

Lo que quiero obtener:

|foo |bar | |foobo |foobar |

¿Hay algún módulo que permita hacer esto?



No es realmente difícil implementar su propia función de formateo:

def print_table(table): col_width = [max(len(x) for x in col) for col in zip(*table)] for line in table: print "| " + " | ".join("{:{}}".format(x, col_width[i]) for i, x in enumerate(line)) + " |" table = [(str(x), str(f(x))) for x in mylist] print_table(table)


Para obtener una tabla más hermosa, use el módulo de tabulación:

Enlace de tabulación

Aquí reportó un ejemplo:

>>> from tabulate import tabulate >>> table = [["Sun",696000,1989100000],["Earth",6371,5973.6], ... ["Moon",1737,73.5],["Mars",3390,641.85]] >>> print tabulate(table) ----- ------ ------------- Sun 696000 1.9891e+09 Earth 6371 5973.6 Moon 1737 73.5 Mars 3390 641.85 ----- ------ -------------


Parece que quieres que tus columnas ljust justificadas a la izquierda, pero no he visto ninguna respuesta que mencione el método ljust string, así que lo demostraré en Python 2.7:

def bar(item): return item.replace(''foo'',''bar'') width = 20 mylist = [''foo1'',''foo200000'',''foo33'',''foo444''] for item in mylist: print "{}| {}".format(item.ljust(width),bar(item).ljust(width)) foo1 | bar1 foo200000 | bar200000 foo33 | bar33 foo444 | bar444

Para su referencia, ejecutar la help(''abc''.ljust) le da esto:

S.just (ancho [, fillchar]) -> cadena

Parece que el método ljust toma su ancho especificado y resta la longitud de la cadena de ese, y rellena el lado derecho de la cadena con tantos caracteres.


Puedes probar BeautifulTable . Aquí hay un ejemplo:

>>> from beautifultable import BeautifulTable >>> table = BeautifulTable() >>> table.column_headers = ["name", "rank", "gender"] >>> table.append_row(["Jacob", 1, "boy"]) >>> table.append_row(["Isabella", 1, "girl"]) >>> table.append_row(["Ethan", 2, "boy"]) >>> table.append_row(["Sophia", 2, "girl"]) >>> table.append_row(["Michael", 3, "boy"]) >>> print(table) +----------+------+--------+ | name | rank | gender | +----------+------+--------+ | Jacob | 1 | boy | +----------+------+--------+ | Isabella | 1 | girl | +----------+------+--------+ | Ethan | 2 | boy | +----------+------+--------+ | Sophia | 2 | girl | +----------+------+--------+ | Michael | 3 | boy | +----------+------+--------+


mylist = {"foo":"bar", "foobo":"foobar"} width_col1 = max([len(x) for x in mylist.keys()]) width_col2 = max([len(x) for x in mylist.values()]) def f(ind): return mylist[ind] for i in mylist: print "|{0:<{col1}}|{1:<{col2}}|".format(i,f(i),col1=width_col1, col2=width_col2)