データをbeautifultableで簡単に表形式で出力してみよう
prettytable
BeatifulTable
次のような特徴があります。
テーブルのルックアンドフィールの完全なカスタマイズ
豊富なテーブル作成の方法を提供
行ごとに追加、列ごとに追加、これらの両方の方法を組み合わせたテーブル作成方法が可能
カラー出力をサポート:
ANSIシーケンスや任意のライブラリを使用したカラー表示ができる
複数出力スタイルをサポート
カスタムスタイルを作成することもできる。
Unicode文字のサポート
ストリーミングテーブルのサポート
データの取得が遅い場合に有益で便利です。
code: using_beautifultable.py
import numpy as np
from beautifultable import BeautifulTable
table = BeautifulTable()
table.columns.header = teams_list
for r in range(len(data)):
print(table)
code: zsh
% python using_beautifultable.py
+--------+---------+-------------+
| Dallas | Chicago | Los Angeles |
+--------+---------+-------------+
| 1 | 2 | 1 |
+--------+---------+-------------+
| 0 | 1 | 0 |
+--------+---------+-------------+
| 2 | 4 | 1 |
+--------+---------+-------------+
Pandas のデータフレームのようにカラム、行を抜き出すことも簡単にできます。
code: usng_beautifultable2.py
import numpy as np
from beautifultable import BeautifulTable
table = BeautifulTable()
table.columns.header = teams_list
for r in range(len(data)):
print(new_table)
new_table = table.columns:2 print(new_table)
code: zsh
% python using_beautifultable2.py
+--------+---------+-------------+
| Dallas | Chicago | Los Angeles |
+--------+---------+-------------+
| 1 | 2 | 1 |
+--------+---------+-------------+
| 0 | 1 | 0 |
+--------+---------+-------------+
+--------+---------+
| Dallas | Chicago |
+--------+---------+
| 1 | 2 |
+--------+---------+
| 0 | 1 |
+--------+---------+
| 2 | 4 |
+--------+---------+
code: python
table.columns.alignment'Dallas' = BeautifulTable.ALIGN_LEFT table.columns.alignment'Chicago' = BeautifulTable.ALIGN_CENTER # default table.columns.alignment'Los Angeles' = BeautifulTable.ALIGN_RIGHT code: zsh
% python using_beautifultable_alignment.py
+--------+---------+-------------+
| Dallas | Chicago | Los Angeles |
+--------+---------+-------------+
| 1 | 2 | 1 |
+--------+---------+-------------+
| 0 | 1 | 0 |
+--------+---------+-------------+
| 2 | 4 | 1 |
+--------+---------+-------------+
code: python
code: zsh
% python using_beautifultable_padding.py
+----------+-------------+-------------------+
| Dallas | Chicago | Los Angeles |
+----------+-------------+-------------------+
| 1 | 2 | 1 |
+----------+-------------+-------------------+
| 0 | 1 | 0 |
+----------+-------------+-------------------+
| 2 | 4 | 1 |
+----------+-------------+-------------------+
スタイル
STYLE_DEFAULT / STYLE_MYSQL
デフォルトのスタイルは、STYLE_MYSQL を指定したときと同様に、MySQLでのテーブル出力フォーマットで表示します。
code: python
>> table.set_style(BeautifulTable.STYLE_DEFAULT)
>> print(table)
+----+----------+------+--------+
| | name | rank | gender |
+----+----------+------+--------+
| S1 | Jacob | 1 | boy |
+----+----------+------+--------+
| S2 | Isabella | 1 | girl |
+----+----------+------+--------+
| S3 | Ethan | 2 | boy |
+----+----------+------+--------+
| S4 | Sophia | 2 | girl |
+----+----------+------+--------+
| S5 | Michael | 3 | boy |
+----+----------+------+--------+
STYLE_NONE
スタイル定義をクリアします。
code: python
>> table.set_style(BeautifulTable.STYLE_NONE)
>> print(table)
name rank gender
S1 Jacob 1 boy
S2 Isabella 1 girl
S3 Ethan 2 boy
S4 Sophia 2 girl
S5 Michael 3 boy
STYLE_DOTED
code: python
>> table.set_style(BeautifulTable.STYLE_DOTTED)
>> print(table)
.................................
: : name : rank : gender :
.................................
: S1 : Jacob : 1 : boy :
: S2 : Isabella : 1 : girl :
: S3 : Ethan : 2 : boy :
: S4 : Sophia : 2 : girl :
: S5 : Michael : 3 : boy :
.................................
STYLE_SEPARATED
code: python
>> table.set_style(BeautifulTable.STYLE_SEPARATED)
>> print(table)
+====+==========+======+========+
| | name | rank | gender |
+====+==========+======+========+
| S1 | Jacob | 1 | boy |
+----+----------+------+--------+
| S2 | Isabella | 1 | girl |
+----+----------+------+--------+
| S3 | Ethan | 2 | boy |
+----+----------+------+--------+
| S4 | Sophia | 2 | girl |
+----+----------+------+--------+
| S5 | Michael | 3 | boy |
+----+----------+------+--------+
STYLE_COMPACT
code: python
>> table.set_style(BeautifulTable.STYLE_COMPACT)
>> print(table)
name rank gender
---- ---------- ------ --------
S1 Jacob 1 boy
S2 Isabella 1 girl
S3 Ethan 2 boy
S4 Sophia 2 girl
S5 Michael 3 boy
STYLE_MARKDOWN
整列(左寄せ、右寄せ、センター)はサポートされていません。
code: python
>> table.set_style(BeautifulTable.STYLE_MARKDOWN)
>> print(table)
| | name | rank | gender |
|----|----------|------|--------|
| S1 | Jacob | 1 | boy |
| S2 | Isabella | 1 | girl |
| S3 | Ethan | 2 | boy |
| S4 | Sophia | 2 | girl |
| S5 | Michael | 3 | boy |
STYLE_RST
code: python
>> table.set_style(BeautifulTable.STYLE_RST)
>> print(table)
==== ========== ====== ========
name rank gender
==== ========== ====== ========
S1 Jacob 1 boy
S2 Isabella 1 girl
S3 Ethan 2 boy
S4 Sophia 2 girl
S5 Michael 3 boy
==== ========== ====== ========
STYLE_BOX
code: python
>> table.set_style(BeautifulTable.STYLE_BOX)
>> print(table)
┌────┬──────────┬──────┬────────┐
│ │ name │ rank │ gender │
├────┼──────────┼──────┼────────┤
│ S1 │ Jacob │ 1 │ boy │
├────┼──────────┼──────┼────────┤
│ S2 │ Isabella │ 1 │ girl │
├────┼──────────┼──────┼────────┤
│ S3 │ Ethan │ 2 │ boy │
├────┼──────────┼──────┼────────┤
│ S4 │ Sophia │ 2 │ girl │
├────┼──────────┼──────┼────────┤
│ S5 │ Michael │ 3 │ boy │
└────┴──────────┴──────┴────────┘
STYLE_DOUBLED
code: python
>> table.set_style(BeautifulTable.STYLE_BOX_DOUBLED)
>> print(table)
╔════╦══════════╦══════╦════════╗
║ ║ name ║ rank ║ gender ║
╠════╬══════════╬══════╬════════╣
║ S1 ║ Jacob ║ 1 ║ boy ║
╠════╬══════════╬══════╬════════╣
║ S2 ║ Isabella ║ 1 ║ girl ║
╠════╬══════════╬══════╬════════╣
║ S3 ║ Ethan ║ 2 ║ boy ║
╠════╬══════════╬══════╬════════╣
║ S4 ║ Sophia ║ 2 ║ girl ║
╠════╬══════════╬══════╬════════╣
║ S5 ║ Michael ║ 3 ║ boy ║
╚════╩══════════╩══════╩════════╝
SYTLE_BOX_ROUNDED
code: python
>> table.set_style(BeautifulTable.STYLE_BOX_ROUNDED)
>> print(table)
╭────┬──────────┬──────┬────────╮
│ │ name │ rank │ gender │
├────┼──────────┼──────┼────────┤
│ S1 │ Jacob │ 1 │ boy │
├────┼──────────┼──────┼────────┤
│ S2 │ Isabella │ 1 │ girl │
├────┼──────────┼──────┼────────┤
│ S3 │ Ethan │ 2 │ boy │
├────┼──────────┼──────┼────────┤
│ S4 │ Sophia │ 2 │ girl │
├────┼──────────┼──────┼────────┤
│ S5 │ Michael │ 3 │ boy │
╰────┴──────────┴──────┴────────╯
STYLE_GRID
code: python
>> table.set_style(BeautifulTable.STYLE_GRID)
>> print(table)
╔════╤══════════╤══════╤════════╗
║ │ name │ rank │ gender ║
╟────┼──────────┼──────┼────────╢
║ S1 │ Jacob │ 1 │ boy ║
╟────┼──────────┼──────┼────────╢
║ S2 │ Isabella │ 1 │ girl ║
╟────┼──────────┼──────┼────────╢
║ S3 │ Ethan │ 2 │ boy ║
╟────┼──────────┼──────┼────────╢
║ S4 │ Sophia │ 2 │ girl ║
╟────┼──────────┼──────┼────────╢
║ S5 │ Michael │ 3 │ boy ║
╚════╧══════════╧══════╧════════╝
カスタムスタイル
code: python
table.set_style(BeautifulTable.STYLE_NONE)
table.border.left = 'o'
table.border.right = 'o'
table.border.top = '<~>'
table.border.bottom = '='
table.columns.header.separator = '^'
table.columns.separator = ':'
table.rows.separator = '~'
code: zsh
% python using_beautifultable_customstyle.py
<~><~><~><~><~><~><~><~><~><~><~><
o Dallas : Chicago : Los Angeles o
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
o 1 : 2 : 1 o
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
o 0 : 1 : 0 o
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
o 2 : 4 : 1 o
==================================
色表示
code: python
from termcolor import colored
table.rows.append([
colored("Dallas", "blue"),
colored("Chicago", "cyan"),
colored("Los Angeles", "red")
])
code: using_beautiuletable_paragraph.py
rom beautifultable import BeautifulTable
table = BeautifulTable(maxwidth=40)
table.rows.append(["first Line\nsecond Line\nthird Line",
"first Line\nsecond Line"])
table.rows.append(["UTF8エンコーディングをサポートしています",
"日本語の表示と折返しもOKです"])
print(table)
code: zsh
% python using_beautifultable_paragraph.py
+----------------------+---------------+
| Heading 1 | Heading 2 |
+----------------------+---------------+
| first Line | single line |
| second Line | |
+----------------------+---------------+
| first Line | first Line |
| second Line | second Line |
| third Line | |
+----------------------+---------------+
| UTF8エンコーディング | 日本語の表示 |
| をサポートしています | と折返しもOK |
| | です |
+----------------------+---------------+
補足説明:
この資料を提供しているサービス ScrapBoxの仕様のため、
端末では期待どおりに出力できていますが、
コピー&ペーストした code ボックスの中ではずれてしまっています。