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()
и т.д., позволяющий установить ширину и выравнивание?
Ответы
Ответ 1
Попробуйте этот подход, используя более новый синтаксис 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])
Ответ 2
Это может быть достигнуто с помощью rjust
:
line_new = word[0].rjust(10) + word[1].rjust(10) + word[2].rjust(10)
Ответ 3
Вы можете выровнять его так:
print('{:>8} {:>8} {:>8}'.format(*words))
где >
означает " align to right", а 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
- это список из трех элементов).
Ответ 4
Мне действительно нравится новая интерполяция буквенных строк в Python 3. 6+:
line_new = f'{word[0]:>12} {word[1]:>12} {word[2]:>12}'
Ссылка: PEP 498 - интерполяция буквенных строк
Ответ 5
Вот еще один способ, которым вы можете форматировать, используя формат 'f-string':
print(
f"{'Trades:':<15}{cnt:>10}",
f"\n{'Wins:':<15}{wins:>10}",
f"\n{'Losses:':<15}{losses:>10}",
f"\n{'Breakeven:':<15}{evens:>10}",
f"\n{'Win/Loss Ratio:':<15}{win_r:>10}",
f"\n{'Mean Win:':<15}{mean_w:>10}",
f"\n{'Mean Loss:':<15}{mean_l:>10}",
f"\n{'Mean:':<15}{mean_trd:>10}",
f"\n{'Std Dev:':<15}{sd:>10}",
f"\n{'Max Loss:':<15}{max_l:>10}",
f"\n{'Max Win:':<15}{max_w:>10}",
f"\n{'Sharpe Ratio:':<15}{sharpe_r:>10}",
)
Это обеспечит следующий вывод:
Trades: 2304
Wins: 1232
Losses: 1035
Breakeven: 37
Win/Loss Ratio: 1.19
Mean Win: 0.381
Mean Loss: -0.395
Mean: 0.026
Std Dev: 0.56
Max Loss: -3.406
Max Win: 4.09
Sharpe Ratio: 0.7395
То, что вы здесь делаете, это то, что вы говорите, что первый столбец имеет длину 15 символов, и он оставлен выровненным, а второй столбец (значения) имеет длину 10 символов и выровнен справа
Ответ 6
Простая таблица вывода:
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.2f: 10 - минимальная длина, а 2 - число десятичных знаков.
Ответ 7
Чтобы сделать это с помощью f-строки и с контролем количества завершающих цифр:
print(f'A number -> {my_number:>20.5f}')