Format wyjściowy ciąg, wyrównanie w prawo
Przetwarzam plik tekstowy zawierający współrzędne x, y, z
1 128 1298039
123388 0 2
....
Każdy wiersz jest rozdzielany na 3 elementy za pomocą
words = line.split()
Po przetworzeniu danych muszę zapisać współrzędne w innym pliku txt, aby pozycje w każdej kolumnie były wyrównane w prawo (jak również w pliku wejściowym). Każda linia składa się ze współrzędnych
line_new = words[0] + ' ' + words[1] + ' ' words[2].
Czy jest jakiś manipulator jak std::setw()
itp. w C++ pozwala ustawić szerokość i wyrównanie?
7 answers
Wypróbuj to podejście używając nowszego str.format
składnia :
line_new = '{:>12} {:>12} {:>12}'.format(word[0], word[1], word[2])
A oto jak to zrobić używając starej składni %
(przydatnej dla starszych wersji Pythona, które nie obsługują 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/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-08 23:51:43
Można to osiągnąć za pomocą 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/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-22 22:21:50
Możesz wyrównać tak:
print('{:>8} {:>8} {:>8}'.format(*words))
Gdzie >
oznacza " align to right", a 8
jest width dla konkretnej wartości.
A oto dowód:
>>> for line in [[1, 128, 1298039], [123388, 0, 2]]:
print('{:>8} {:>8} {:>8}'.format(*line))
1 128 1298039
123388 0 2
Ps. *line
oznacza, że lista line
zostanie rozpakowana, więc .format(*line)
działa podobnie do .format(line[0], line[1], line[2])
(zakładając, że line
jest listą zawierającą tylko trzy elementy).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-27 21:43:24
Naprawdę lubię nową interpolację ciągów literalnych w Pythonie 3.6+:
line_new = f'{word[0]:>12} {word[1]:>12} {word[2]:>12}'
Reference: PEP 498 -- literalna Interpolacja ciągu
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-30 12:15:48
Oto inny sposób formatowania za pomocą formatu '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}",
)
To dostarczy następujące Wyjście:
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
Mówisz, że pierwsza kolumna ma długość 15 znaków i jest w lewo uzasadniona, a druga kolumna (wartości) ma długość 10 znaków i jest w prawo uzasadniona.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-03 13:20:12
Prosta tabulacja wyjścia:
a = 0.3333333
b = 200/3
print("variable a variable b")
print("%10.2f %10.2f" % (a, b))
Wyjście:
variable a variable b
0.33 66.67
%10.2 f: 10 to minimalna długość, a 2 to liczba miejsc po przecinku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-14 13:44:23
Aby to zrobić za pomocą f-string i z kontrolą liczby końcowych cyfr:
print(f'A number -> {my_number:>20.5f}')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-15 15:56:23