programing

출력 문자열 형식 지정, 오른쪽 정렬

newsource 2023. 7. 4. 21:57

출력 문자열 형식 지정, 오른쪽 정렬

좌표 x, y, z가 포함된 텍스트 파일을 처리하는 중입니다.

     1      128  1298039
123388        0        2
....

모든 라인은 다음을 사용하여 3개의 항목으로 구분됩니다.

words = line.split()

데이터를 처리한 후에는 입력 파일뿐만 아니라 각 열의 항목이 올바르게 정렬되도록 다른 txt 파일에 좌표를 다시 기록해야 합니다.모든 라인은 좌표로 구성됩니다.

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

이런 조작자가 있습니까?std::setw()C++에서 폭과 정렬을 설정할 수 있는 등?

최신 구문을 사용하여 이 방법을 사용해 보십시오.

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

그리고 여기 오래된 것을 사용하는 방법이 있습니다.%구문(지원하지 않는 이전 버전의 파이썬에 유용함)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

추신.*line을 의미합니다.line목록이 압축 해제될 것입니다..format(*line)와 유사하게 작동합니다..format(line[0], line[1], line[2])(계속)line는 세 개의 요소만 포함된 목록입니다.

다음은 '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자이고 오른쪽 맞춤입니다.

목록에서 항목을 결합하고 항목 사이의 공백을 포맷하려면 '' 및 일반 포맷 기술을 사용할 수 있습니다.

이 예제에서는 각 숫자를 3개의 공백으로 구분합니다.여기서 키는 f"{'':>3}"입니다.

print(f"{'':>3}".join(str(i) for i in range(1, 11)))

출력:

1   2   3   4   5   6   7   8   9   10

다음을 사용하여 달성할 수 있습니다.rjust:

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

저는 Python 3.6+에서 새로운 리터럴 문자열 보간을 정말 즐깁니다.

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

참조: PEP 498 -- 리터럴 문자열 보간

출력에 대한 간단한 표:

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는 소수 자릿수입니다.

f-string을 사용하고 후행 자릿수를 제어하여 이 작업을 수행하려면:

print(f'A number -> {my_number:>20.5f}')

블라드의 훌륭한 콘텐츠를 다른 사람들과 혼합하여 코드를 쉽고 사용하기 쉽게 작성할 수도 있습니다.

>>> cnt = wins = losses      = str(   2)
>>> evens = win_r = mean_w   = str(  14)
>>> mean_l = mean_trd = sd   = str( 336)
>>> max_l = max_w = sharpe_r = str(4278)
>>>
>>> rpad = 10
>>>
>>> print(
...     '\n Trades         ' +      cnt.rjust(rpad),
...     '\n Wins           ' +     wins.rjust(rpad),
...     '\n Losses         ' +   losses.rjust(rpad),
...     '\n Breakeven      ' +    evens.rjust(rpad),
...     '\n Win/Loss Ratio ' +    win_r.rjust(rpad),
...     '\n Mean Win       ' +   mean_w.rjust(rpad),
...     '\n Mean Loss      ' +   mean_l.rjust(rpad),
...     '\n Mean           ' + mean_trd.rjust(rpad),
...     '\n Std Dev        ' +       sd.rjust(rpad),
...     '\n Max Loss       ' +    max_l.rjust(rpad),
...     '\n Max Win        ' +    max_w.rjust(rpad),
...     '\n Sharpe Ratio   ' + sharpe_r.rjust(rpad),
... )

 Trades                  2
 Wins                    2
 Losses                  2
 Breakeven              14
 Win/Loss Ratio         14
 Mean Win               14
 Mean Loss             336
 Mean                  336
 Std Dev               336
 Max Loss             4278
 Max Win              4278
 Sharpe Ratio         4278

언급URL : https://stackoverflow.com/questions/8234445/format-output-string-right-alignment