web-dev-qa-db-ja.com

Python:出力文字列のフォーマット、右揃え

座標x、y、zを含むテキストファイルを処理しています

     1      128  1298039
123388        0        2
....

すべての行は3つの項目に区切られています

words = line.split()

データを処理した後、各列の項目が(入力ファイルと同様に)右揃えになるように、座標を別のtxtファイルに書き戻す必要があります。すべての行は座標で構成されています

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

C++でstd::setw()などのようなマニピュレータがあり、幅と配置を設定できますか?

129
justik

新しい str.format構文 を使用してこのアプローチを試してください:

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

そして、古い%構文(str.formatをサポートしていないPythonの古いバージョンに有用)を使用してそれを行う方法は次のとおりです。

line_new = '%12s  %12s  %12s' % (Word[0], Word[1], Word[2])
190
Mark Byers

次のように調整できます。

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

ここで、>は「右揃え」を意味し、8は特定の値のwidthです。

そして、ここに証拠があります:

>>> 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が3つの要素のみを持つリストであると仮定します)。

45
Tadeck

rjustを使用して実現できます。

line_new = Word[0].rjust(10) + Word[1].rjust(10) + Word[2].rjust(10)
43
clwen

Python 3.6+の新しいリテラル文字列補間を本当に楽しんでいます:

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

リファレンス: PEP 498-リテラル文字列補間

13
dmitry_romanov

出力の簡単な表:

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は小数点以下の桁数です。

5
Thoran

「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文字で左揃えで、2番目の列(値)の長さは10文字で右揃えであるということです。

2
Vlad Bezden