PrettyTable 是python中的一個第三方庫,可用來生成美觀的ASCII格式的表格,十分實用。
如下爲官方介紹:html
A simple Python library for easily displaying tabular data in a visually appealing ASCII table format.
PrettyTable is a simple Python library designed to make it quick and easy to represent tabular data in visually appealing ASCII tables. It was inspired by the ASCII tables used in the PostgreSQL shell psql. PrettyTable allows for selection of which columns are to be printed, independent alignment of columns (left or right justified or centred) and printing of 「sub-tables」 by specifying a row range.python
使用pip便可十分方便的安裝PrettyTable,以下:git
pip install PrettyTable
github上有PrettyTable的使用說明,連接以下:https://github.com/dprince/python-prettytablegithub
如下是具體的使用示例:sql
import prettytable as pt ## 按行添加數據 tb = pt.PrettyTable() tb.field_names = ["City name", "Area", "Population", "Annual Rainfall"] tb.add_row(["Adelaide",1295, 1158259, 600.5]) tb.add_row(["Brisbane",5905, 1857594, 1146.4]) tb.add_row(["Darwin", 112, 120900, 1714.7]) tb.add_row(["Hobart", 1357, 205556,619.5]) print(tb)
+-----------+------+------------+-----------------+ | City name | Area | Population | Annual Rainfall | +-----------+------+------------+-----------------+ | Adelaide | 1295 | 1158259 | 600.5 | | Brisbane | 5905 | 1857594 | 1146.4 | | Darwin | 112 | 120900 | 1714.7 | | Hobart | 1357 | 205556 | 619.5 | +-----------+------+------------+-----------------+
## 按列添加數據 tb.add_column('index',[1,2,3,4]) print(tb)
+-----------+------+------------+-----------------+-------+ | City name | Area | Population | Annual Rainfall | index | +-----------+------+------------+-----------------+-------+ | Adelaide | 1295 | 1158259 | 600.5 | 1 | | Brisbane | 5905 | 1857594 | 1146.4 | 2 | | Darwin | 112 | 120900 | 1714.7 | 3 | | Hobart | 1357 | 205556 | 619.5 | 4 | +-----------+------+------------+-----------------+-------+
## 使用不一樣的輸出風格 tb.set_style(pt.MSWORD_FRIENDLY) print('--- style:MSWORD_FRIENDLY -----') print(tb) tb.set_style(pt.PLAIN_COLUMNS) print('--- style:PLAIN_COLUMNS -----') print(tb) ## 隨機風格,每次不一樣 tb.set_style(pt.RANDOM) print('--- style:MSWORD_FRIENDLY -----') print(tb) tb.set_style(pt.DEFAULT) print('--- style:DEFAULT -----') print(tb)
--- style:MSWORD_FRIENDLY ----- | City name | Area | Population | Annual Rainfall | | Adelaide | 1295 | 1158259 | 600.5 | | Brisbane | 5905 | 1857594 | 1146.4 | | Darwin | 112 | 120900 | 1714.7 | | Hobart | 1357 | 205556 | 619.5 | --- style:PLAIN_COLUMNS ----- City name Area Population Annual Rainfall Adelaide 1295 1158259 600.5 Brisbane 5905 1857594 1146.4 Darwin 112 120900 1714.7 Hobart 1357 205556 619.5 --- style:MSWORD_FRIENDLY ----- @ Adelaide 1295 1158259 600.5 @ @ Brisbane 5905 1857594 1146.4@ @ Darwin 112 120900 1714.7@ @ Hobart 1357 205556 619.5 @ --- style:DEFAULT ----- +-----------+------+------------+-----------------+ | City name | Area | Population | Annual Rainfall | +-----------+------+------------+-----------------+ | Adelaide | 1295 | 1158259 | 600.5 | | Brisbane | 5905 | 1857594 | 1146.4 | | Darwin | 112 | 120900 | 1714.7 | | Hobart | 1357 | 205556 | 619.5 | +-----------+------+------------+-----------------+
## 不打印,獲取表格字符串 s = tb.get_string() print(s) ## 能夠只獲取指定列或行 s = tb.get_string(fields=["City name", "Population"],start=1,end=4) print(s)
+-----------+------+------------+-----------------+ | City name | Area | Population | Annual Rainfall | +-----------+------+------------+-----------------+ | Adelaide | 1295 | 1158259 | 600.5 | | Brisbane | 5905 | 1857594 | 1146.4 | | Darwin | 112 | 120900 | 1714.7 | | Hobart | 1357 | 205556 | 619.5 | +-----------+------+------------+-----------------+ +-----------+------------+ | City name | Population | +-----------+------------+ | Brisbane | 1857594 | | Darwin | 120900 | | Hobart | 205556 | +-----------+------------+
## 自定義表格輸出樣式 ### 設定左對齊 tb.align = 'l' ### 設定數字輸出格式 tb.float_format = "2.2" ### 設定邊框鏈接符爲'*" tb.junction_char = "*" ### 設定排序方式 tb.sortby = "City name" ### 設定左側不填充空白字符 tb.left_padding_width = 0 print(tb)
*----------*-----*-----------*----------------* |City name |Area |Population |Annual Rainfall | *----------*-----*-----------*----------------* |Adelaide |1295 |1158259 |600.50 | |Brisbane |5905 |1857594 |1146.40 | |Darwin |112 |120900 |1714.70 | |Hobart |1357 |205556 |619.50 | *----------*-----*-----------*----------------*
## 不顯示邊框 tb.border = 0 print(tb) ## 修改邊框分隔符 tb.set_style(pt.DEFAULT) tb.horizontal_char = '+' print(tb)
City name Area Population Annual Rainfall Adelaide 1295 1158259 600.50 Brisbane 5905 1857594 1146.40 Darwin 112 120900 1714.70 Hobart 1357 205556 619.50 +++++++++++++++++++++++++++++++++++++++++++++++++++ | City name | Area | Population | Annual Rainfall | +++++++++++++++++++++++++++++++++++++++++++++++++++ | Adelaide | 1295 | 1158259 | 600.50 | | Brisbane | 5905 | 1857594 | 1146.40 | | Darwin | 112 | 120900 | 1714.70 | | Hobart | 1357 | 205556 | 619.50 | +++++++++++++++++++++++++++++++++++++++++++++++++++
## prettytable也支持輸出HTML代碼 s = tb.get_html_string() print(s)
<table> <tr> <th>City name</th> <th>Area</th> <th>Population</th> <th>Annual Rainfall</th> </tr> <tr> <td>Adelaide</td> <td>1295</td> <td>1158259</td> <td>600.50</td> </tr> <tr> <td>Brisbane</td> <td>5905</td> <td>1857594</td> <td>1146.40</td> </tr> <tr> <td>Darwin</td> <td>112</td> <td>120900</td> <td>1714.70</td> </tr> <tr> <td>Hobart</td> <td>1357</td> <td>205556</td> <td>619.50</td> </tr> </table>
## 使用copy方法複製對象 #tb.set_style(pt.DEFAULT) tb.horizontal_char = '.' tb2 = tb.copy() tb.align = 'l' tb2.align = 'r' print(tb) print(tb2) ## 直接賦值,獲得的是索引 tb.horizontal_char = '-' tb.aliign = 'l' tb3 = tb tb3.align = 'r' print(tb) print(tb3)
+...........+......+............+.................+ | City name | Area | Population | Annual Rainfall | +...........+......+............+.................+ | Adelaide | 1295 | 1158259 | 600.50 | | Brisbane | 5905 | 1857594 | 1146.40 | | Darwin | 112 | 120900 | 1714.70 | | Hobart | 1357 | 205556 | 619.50 | +...........+......+............+.................+ +...........+......+............+.................+ | City name | Area | Population | Annual Rainfall | +...........+......+............+.................+ | Adelaide | 1295 | 1158259 | 600.50 | | Brisbane | 5905 | 1857594 | 1146.40 | | Darwin | 112 | 120900 | 1714.70 | | Hobart | 1357 | 205556 | 619.50 | +...........+......+............+.................+ +-----------+------+------------+-----------------+ | City name | Area | Population | Annual Rainfall | +-----------+------+------------+-----------------+ | Adelaide | 1295 | 1158259 | 600.50 | | Brisbane | 5905 | 1857594 | 1146.40 | | Darwin | 112 | 120900 | 1714.70 | | Hobart | 1357 | 205556 | 619.50 | +-----------+------+------------+-----------------+ +-----------+------+------------+-----------------+ | City name | Area | Population | Annual Rainfall | +-----------+------+------------+-----------------+ | Adelaide | 1295 | 1158259 | 600.50 | | Brisbane | 5905 | 1857594 | 1146.40 | | Darwin | 112 | 120900 | 1714.70 | | Hobart | 1357 | 205556 | 619.50 | +-----------+------+------------+-----------------+