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?

103
demandé sur justik 2011-11-23 02:03:03

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])
163
répondu Mark Byers 2017-12-08 23:51:43

, Vous pouvez l'aligner comme ça:

print('{:>8} {:>8} {:>8}'.format(*words))

> 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).

40
répondu Tadeck 2015-05-27 21:43:24

Il peut être réalisé en utilisant rjust:

line_new = word[0].rjust(10) + word[1].rjust(10) + word[2].rjust(10)
32
répondu clwen 2011-11-22 22:21:50

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.

2
répondu Thoran 2016-04-14 13:44:23

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

1
répondu dmitry_romanov 2018-08-30 12:15:48