Python: Formato de cadena de salida, alineación derecha
Estoy procesando un archivo de texto que contiene coordenadas x, y, z
1 128 1298039
123388 0 2
....
Cada línea se delimita en 3 elementos usando
words = line.split()
Después de procesar los datos, necesito escribir las coordenadas en otro archivo txt para que los elementos de cada columna estén alineados a la derecha (así como el archivo de entrada). Cada línea se compone de las coordenadas
line_new = words[0] + ' ' + words[1] + ' ' words[2].
¿hay algún manipulador como std::setw()
etc. en C++ permite establecer el ancho y la alineación?
5 answers
Pruebe este enfoque utilizando la nueva str.format
sintaxis :
line_new = '{:>12} {:>12} {:>12}'.format(word[0], word[1], word[2])
Y aquí está cómo hacerlo usando la antigua sintaxis %
(útil para versiones anteriores de Python que no admiten str.format
):
line_new = '%12s %12s %12s' % (word[0], word[1], word[2])
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-08 23:51:43
Puedes alinearlo así:
print('{:>8} {:>8} {:>8}'.format(*words))
Donde >
significa " alinear a la derecha" y 8
es la anchura para un valor específico.
Y aquí hay una prueba:
>>> for line in [[1, 128, 1298039], [123388, 0, 2]]:
print('{:>8} {:>8} {:>8}'.format(*line))
1 128 1298039
123388 0 2
Ps. *line
significa que la lista line
se desempaquetará, por lo que .format(*line)
funciona de manera similar a .format(line[0], line[1], line[2])
(suponiendo que line
es una lista con solo tres elementos).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-27 21:43:24
Se puede lograr usando rjust
:
line_new = word[0].rjust(10) + word[1].rjust(10) + word[2].rjust(10)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-22 22:21:50
Tabulación simple de la salida:
a = 0.3333333
b = 200/3
print("variable a variable b")
print("%10.2f %10.2f" % (a, b))
Salida:
variable a variable b
0.33 66.67
%10.2 f: 10 es la longitud mínima y 2 es el número de decimales.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-14 13:44:23
Realmente disfruto de una nueva interpolación de cadena literal en Python 3.6+:
line_new = f'{word[0]:>12} {word[1]:>12} {word[2]:>12}'
Referencia: PEP 498 Interp Interpolación Literal de cadena
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-30 12:15:48