1. ホーム
  2. python

[解決済み] Pythonで素敵なカラム出力を作成する

2022-03-07 14:11:22

質問

私は、私が作成したコマンドライン管理ツールで使用するために、パイソンで素敵な列リストを作成しようとしています。

基本的には、次のようなリストが欲しい。

[['a', 'b', 'c'], ['aaaaaaaaaa', 'b', 'c'], ['a', 'bbbbbbbbbb', 'c']]

に変えること。

a            b            c
aaaaaaaaaa   b            c
a            bbbbbbbbbb   c

各行の最長データを知らないので、プレーンタブを使ってもうまくいきません。

これは、Linuxの'column -t'と同じ動作です。

$ echo -e "a b c\naaaaaaaaaa b c\na bbbbbbbbbb c"
a b c
aaaaaaaaaa b c
a bbbbbbbbbb c

$ echo -e "a b c\naaaaaaaaaa b c\na bbbbbbbbbb c" | column -t
a           b           c
aaaaaaaaaa  b           c
a           bbbbbbbbbb  c

これを行うために様々なpythonライブラリを探したのですが、有用なものが見つかりません。

解決方法は?

data = [['a', 'b', 'c'], ['aaaaaaaaaa', 'b', 'c'], ['a', 'bbbbbbbbbb', 'c']]

col_width = max(len(word) for row in data for word in row) + 2  # padding
for row in data:
    print "".join(word.ljust(col_width) for word in row)

a            b            c            
aaaaaaaaaa   b            c            
a            bbbbbbbbbb   c   

これは、列の幅を決定するために最も長いデータ入力を計算し、次に .ljust() を使用して、各カラムを印刷する際に必要なパディングを追加します。