Python: chaîne de sortie de Format, alignement droit
Je traite un fichier texte contenant les coordonnées x, y, z
1 128 1298039
123388 0 2
....
Chaque ligne est délimitée en 3 éléments à l'aide de
words = line.split()
Après le traitement des données, j'ai besoin d'écrire les coordonnées dans un autre fichier txt afin que les éléments de chaque colonne soient alignés à droite (ainsi que le fichier d'entrée). Chaque ligne est composée des coordonnées
line_new = words[0] + ' ' + words[1] + ' ' words[2].
Y a-t-il un manipulateur comme std::setw()
etc. en C++ permettant de définir la largeur et l'alignement?
5 réponses
Essayer cette approche en utilisant la plus récente str.format
la syntaxe:
line_new = '{:>12} {:>12} {:>12}'.format(word[0], word[1], word[2])
Et voici comment le faire en utilisant l'ancienne syntaxe %
(utile pour les anciennes versions de Python qui ne supportent pas str.format
):
line_new = '%12s %12s %12s' % (word[0], word[1], word[2])
, Vous pouvez l'aligner comme ça:
print('{:>8} {:>8} {:>8}'.format(*words))
Où >
signifie "aligner à droite" et " 8
est le largeur pour la valeur spécifique.
Et voici une preuve:
>>> for line in [[1, 128, 1298039], [123388, 0, 2]]:
print('{:>8} {:>8} {:>8}'.format(*line))
1 128 1298039
123388 0 2
Ps. *line
signifie que la line
liste sera déballé, donc .format(*line)
fonctionne de façon similaire à .format(line[0], line[1], line[2])
(en supposant que line
est une liste avec seulement trois éléments).
Il peut être réalisé en utilisant rjust
:
line_new = word[0].rjust(10) + word[1].rjust(10) + word[2].rjust(10)
Tabulation Simple de la sortie:
a = 0.3333333
b = 200/3
print("variable a variable b")
print("%10.2f %10.2f" % (a, b))
Sortie:
variable a variable b
0.33 66.67
%10.2 f: 10 est la longueur minimale et 2 est le nombre de décimales.
J'apprécie vraiment une nouvelle interpolation de chaîne littérale en Python 3.6+:
line_new = f'{word[0]:>12} {word[1]:>12} {word[2]:>12}'
Référence: PEP 498 -- Interpolation de chaîne littérale