web-dev-qa-db-ja.com

表形式データからASCII artテーブルを作成します

おそらくカンマまたはタブで区切られた入力を想定して、適切にパディングされた一連の列をstdoutに表示したいので、そうでなければ乱雑に表示される列情報を簡単にスキャンできます。

私はtroffベースのソリューションを試しましたが、単純なデモは機能しましたが、コマンドに実際の入力を供給すると、奇妙なエラーが発生しました。私は現在sedベースの 方法 かなり遅いハック...

編集するcolumnは非常に便利なツールですただし私が列に持っていれば本当に素晴らしいでしょう、たとえば、パイプ文字(|)それらの間で、それらが空間に「浮いている」ように見えず、それぞれがどこから始まるかを簡単に区別できます。

PS。この投稿のタイトルは、「ASCIIアートテーブル」ではなく、「ASCII「テーブル」」を読むために使用されていました。混乱を取り除くために編集されました。

8
i336_

CSVファイルを想定すると、次のようにcolumn(1)を使用できます。

column -ts, your_file

これは私のDebianディストリビューションのbsdmainutilsパッケージに含まれているので、どれだけ移植可能かわかりません。

注意すべきもう2つの点:

  1. 上記の例は単純化されています。出力のフォーマット方法の詳細については、manページをご覧ください。
  2. コンマを含む引用符付きのフィールドにはうまく対応しません。つまり、a,b,"c,d" 3列ではなく4列として。
12
Joseph R.

表形式データがpythonで何らかの方法で読み取られる場合(この例では、Pandas moduleを含むcsvファイルを読み取る場合)、 "tabulate"モジュールは非常に便利でシンプルです。

import pandas
from tabulate import tabulate

data = pandas.read_csv('/tmp/foo.csv', index_col=0)
print(tabulate(data, headers=data.columns, tablefmt="grid"))

これは素晴らしい出力を与えます:

+-----+------+------+
|     |    A |    B |
+=====+======+======+
| foo | 1    |  0.2 |
+-----+------+------+
| bar | 3.14 | 10.9 |
+-----+------+------+

さまざまなスタイルを作成できます

print(tabulate(data, headers=data.columns, tablefmt="fancy_grid"))

╒═════╤══════╤══════╕
│     │    A │    B │
╞═════╪══════╪══════╡
│ foo │ 1    │  0.2 │
├─────┼──────┼──────┤
│ bar │ 3.14 │ 10.9 │
╘═════╧══════╧══════╛
5
billjoie

これにより、入力ファイルが列化され、|文字が各列を囲むように追加されます。

 sed -e 's/^/| /' -e 's/,/,| /g' -e 's/$/,|/' inputfile | column -t -s,

サンプルの実行(すぐに利用できるコロン区切りファイルを使用):

$ head -4 /etc/passwd | tr : , | \
  sed -e 's/^/| /' -e 's/,/,| /g' -e 's/$/,|/' | column -t -s,

| root    | x  | 0  | 0  | root    | /root      | /bin/bash  |
| daemon  | x  | 1  | 1  | daemon  | /usr/sbin  | /bin/sh    |
| bin     | x  | 2  | 2  | bin     | /bin       | /bin/sh    |
| sys     | x  | 3  | 3  | sys     | /dev       | /bin/sh    |
4
Mark Plotnick