2012-06-28 28 views
6

Tengo problemas para hacer que los textos de impresión de pitón se alineen correctamente. He intentado todo lo que sabía, pero sigue siendo el mismo resultado y ¡es muy molesto !.Consola de formato Salida

Aquí es lo que estoy haciendo en la consola enter image description here

Aquí está el código que tengo.

print " FileName\t\t\t\t\tStatus\t\tBinary Type\n" 

for files in PASS: 
    log = subprocess.check_output(['dumpbin','/HEADERS',files]) 
    if arch64 in log: 
     print" %s \t\t\t\tPASSED\t\t 64-bit \t\t " %files 
    elif arch32 in log: 
     print" %s \t\t\t\tPASSED\t\t 32-bit \t\t " %files 
print"\n" 
for files in FAILED: 

    print" %s \t\t\t\t FAILED \t\t  " %files 

print "\n\n 

Respuesta

11

Usa %45s para crear un campo justificado a la derecha de 45 caracteres. Y use %-45s para hacer una cadena justificada a la izquierda. También considere extraer su impresión de línea en una función, de esa manera podrá cambiarla fácilmente en un solo lugar. De esta manera:

# fake setup 
PASS = ["foo.exe", "bar.exe", "really_long_filename.exe"] 
FAILED = ["failed.exe"] 
types = ["32-bit", "64-bit", "64-bit"] 
arch64 = '64' 
arch32 = '32' 

# your code 
def print_row(filename, status, file_type): 
    print " %-45s %-15s %15s" % (filename, status, file_type) 

print_row('FileName', 'Status', 'Binary Type') 

for files in PASS: 
    log = types.pop() 
    if arch64 in log: 
     print_row(files, 'PASSED', '64-bit') 
    elif arch32 in log: 
     print_row(files, 'PASSED', '32-bit') 
print"\n" 

for files in FAILED: 
     print_row(files, 'FAILED', '') 

print "\n\n" 
+0

Gracias, esto funciona muy bien :), ¿puedo preguntarle por qué usaste 'tipo' como uno de los argumentos de función? – cyberbemon

+1

erm ... debería haber sido de tipo binario o algo ... tipo es una mala elección de nombre ya que ya es una función en python ... todavía funcionará pero no es un buen estilo ... así que lo he solucionado arriba :) :) –

+1

O ['str.ljust'] (http://docs.python.org/library/stdtypes.html#str.rjust) para abreviar –

4

En lugar de las pestañas, es mejor utilizar directivas de cadenas de formato en las que es posible especificar el número exacto de espacios, y reservar para la salida.

Por ejemplo

print '>>%20s<<' %('some string') 
>>   some string<< 

se reserva 20 plazas y derecho -align esta cadena para su visualización. Puede izquierda -justify mediante el uso de %-20s

print '>>%-20s<<' %('some string') 
>>some string   << 

números pueden ser especificados usando d para enteros y f para valores de coma flotante. Por ejemplo,

print '%03d %5.2f' %(5, 22/7.0) 
005 3.14 

En este ejemplo I se reservaron 3 plazas de cero-acolchados para un valor entero, y 5 espacios para un flotador (2 para los valores después del espacio decimal). Puede controlar alignemnt aquí también con -. Hay muchas otras opciones para formatear la salida, consulte los enlaces sugeridos a continuación para obtener más detalles.

Tenga en cuenta que se recomienda el uso de la función .format(). Vea SO my answer here sobre cómo usar .format(). Este answer también puede ayudar.

Mientras que .format puede parecer muy detallado, ofrece una gran flexibilidad y una de mis características favoritas es la posibilidad de imprimir fácilmente comas en grandes cantidades para facilitar la lectura.

Consulte Python docs on String Formatting para obtener más detalles para ayudarlo a alinear su salida exactamente de la manera que le gustaría.

2

Puede simplificarlo mucho si utiliza el formato de cadena con padding, por ejemplo.

>>> '%20s' % 'test' 
'    test' 
>>> '%-20s' % 'test' 
'test    ' 
0

Puede usar un módulo de terceros para formatear la salida a la consola.

i.e.: texttable

2

sugiere emplear ljust con ellos algo como

print files.ljust(20) + 'Passed'.ljust(5) + '64-bit' 

en lugar de esto:

print" %s \t\t\t\tPASSED\t\t 64-bit \t\t " %files