Python: формат выходной строки, выравнивание по правому краю


я обрабатываю текстовый файл, содержащий координаты x, y, z

     1      128  1298039
123388        0        2
....

каждая строка разделена на 3 элемента с помощью

words = line.split()

после обработки данных мне нужно записать координаты обратно в другой txt-файл, чтобы элементы в каждом столбце были выровнены вправо (а также входной файл). Каждая строка состоит из координат

line_new = words[0]  + '  ' + words[1]  + '  ' words[2].

есть ли какой-нибудь манипулятор, как std::setw() etc. в C++ позволяет задать ширину и выравнивание?

5 103

5 ответов:

попробуйте этот подход, используя новые str.format синтаксис:

line_new = '{:>12}  {:>12}  {:>12}'.format(word[0], word[1], word[2])

и вот как это сделать с помощью старого % синтаксис (для старых версий Python, которые не поддерживают str.format):

line_new = '%12s  %12s  %12s' % (word[0], word[1], word[2])

вы можете выровнять его так:

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

здесь > значит "выровнять по правой" и 8 - это ширина для конкретного значения.

и вот доказательство:

>>> for line in [[1, 128, 1298039], [123388, 0, 2]]:
    print('{:>8} {:>8} {:>8}'.format(*line))


       1      128  1298039
  123388        0        2

Ps. *line означает line список будет распакован, так что .format(*line) работает аналогично .format(line[0], line[1], line[2]) (если line список с тремя элементами).

Это может быть достигнуто с помощью rjust:

line_new = word[0].rjust(10) + word[1].rjust(10) + word[2].rjust(10)

простая таблица вывода:

a = 0.3333333
b = 200/3
print("variable a    variable b")
print("%10.2f    %10.2f" % (a, b))

выход:

variable a    variable b
      0.33         66.67

%10.2 f: 10-Минимальная длина и 2-Количество десятичных знаков.

Мне очень нравится новая литеральная строковая интерполяция в Python 3.6+:

line_new = f'{word[0]:>12}  {word[1]:>12}  {word[2]:>12}'

ссылки: PEP 498 -- Литеральная строковая интерполяция