Alinear columnas en un archivo de texto

Soy un Python noobie y estoy atascado en algo que sé que va a ser simple …

Tengo un archivo de texto plano que contiene datos de inicio de sesión de usuario:

dtrapani HCPD-EPD-3687 Mon 05/13/2013 9:47:01.72 dlibby HCPD-COS-4611 Mon 05/13/2013 9:49:34.55 lmurdoch HCPD-SDDEB-3736 Mon 05/13/2013 9:50:38.48 lpatrick HCPD-WIN7-015 Mon 05/13/2013 9:57:44.57 mlay HCPD-WAR-3744 Mon 05/13/2013 10:00:07.94 eyoung HCPD-NLCC-0645 Mon 05/13/2013 10:03:01.83 

Estoy tratando de imprimir los datos en columnas alineadas:

 dtrapani HCPD-EPD-3687 Mon 05/13/2013 9:47:01.72 dlibby HCPD-COS-4611 Mon 05/13/2013 9:49:34.55 lmurdoch HCPD-SDDEB-3736 Mon 05/13/2013 9:50:38.48 lpatrick HCPD-WIN7-015 Mon 05/13/2013 9:57:44.57 mlay HCPD-WAR-3744 Mon 05/13/2013 10:00:07.94 eyoung HCPD-NLCC-0645 Mon 05/13/2013 10:03:01.83 

¡He buscado en todo este sitio y casi he matado a mi “Máquina de Google”! Gracias por cualquier ayuda que pueda proporcionar.

Edición: Olvidé incluir mi código:

  with open(r'C:\path\to\logons.txt', 'r') as f: for line in f: data = line.strip() print(data) 

Me gustaría el nuevo (er) formateador de impresión con este (asumiendo que sus campos son consistentes). La statement de impresión / formato es bastante fácil de usar y se puede encontrar aquí . Dado que sus datos pueden verse como una lista, puede hacer una sola llamada para formatear y, al proporcionar los datos correctos del formateador, obtendrá su salida. Esto tiene un control un poco más preciso que ljust o rjust pero tiene el inconveniente de que necesita saber que sus datos son consistentes.

 with open(r'C:\path\to\logons.txt', 'r') as f: for line in f: data = line.split() # Splits on whitespace print '{0[0]:<15}{0[1]:<15}{0[2]:<5}{0[3]:<15}{0[4]:>15}'.format(data) 

str.ljust(width, [fillchar=" "]) ( http://docs.python.org/2/library/stdtypes.html#str.ljust ) parece ser lo que estás buscando. A la izquierda, justifique cada campo al imprimir en la longitud máxima + un poco.

Para que el último campo coincida con su ejemplo, querrá justificarlo a la derecha usando rjust.

 #!/usr/bin/env python import sys inputfile = '''dtrapani HCPD-EPD-3687 Mon 05/13/2013 9:47:01.72 dlibby HCPD-COS-4611 Mon 05/13/2013 9:49:34.55 lmurdoch HCPD-SDDEB-3736 Mon 05/13/2013 9:50:38.48 lpatrick HCPD-WIN7-015 Mon 05/13/2013 9:57:44.57 mlay HCPD-WAR-3744 Mon 05/13/2013 10:00:07.94 eyoung HCPD-NLCC-0645 Mon 05/13/2013 10:03:01.83'''.split('\n') output = sys.stdout lengths = [10,17,5,14,0] for line in inputfile: line = line.split() for field, fieldlength in zip(line,lengths): output.write(field.ljust(fieldlength)) output.write('\n')