La escritura de espacio en blanco de texto delimitado para ser legible por humanos en Python

StackOverflow https://stackoverflow.com/questions/3689936

Pregunta

Tengo una lista de listas que se ve algo como esto:

data = [['seq1', 'ACTAGACCCTAG'],
        ['sequence287653', 'ACTAGNACTGGG'],
        ['s9', 'ACTAGAAACTAG']]

escribir la información en un archivo de la siguiente manera:

for i in data:
    for j in i:
        file.write('\t')
        file.write(j)
    file.write('\n')

Las miradas de salida como la siguiente:

seq1   ACTAGACCCTAG  
sequence287653   ACTAGNACTGGG  
s9   ACTAGAAACTAG  

Las columnas no se alinean perfectamente debido a la variación en la longitud del primer elemento en cada lista interna. ¿Cómo puedo escribir cantidades apropiadas de espacio en blanco entre el primer y segundo elementos para hacer la segunda línea de la columna para facilitar su legibilidad humana?

¿Fue útil?

Solución

Se necesita una cadena de formato:

for i,j in data:
    file.write('%-15s %s\n' % (i,j))

medios %-15s justificación a la izquierda de un campo de 15 espacio para una cadena. Aquí está la salida:

seq1            ACTAGACCCTAG
sequence287653  ACTAGNACTGGG
s9              ACTAGAAACTAG

Otros consejos

data = [['seq1', 'ACTAGACCCTAG'],
        ['sequence287653', 'ACTAGNACTGGG'],
        ['s9', 'ACTAGAAACTAG']]
with open('myfile.txt', 'w') as file:
    file.write('\n'.join('%-15s %s' % (i,j) for i,j in data) )

para mí es aún más claro que la expresión con el lazo

"%10s" % obj asegurará mínimo de 10 plazas con la representación de cadena de obj alineado a la derecha.

"%-10s" % obj hace lo mismo, pero se alinea a la izquierda.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top