當前位置:首頁>時尚>python做炫酷表格(太漂亮了)
發布時間:2024-08-04閱讀(26)
最近在用 Python 寫一個小工具,這個工具主要就是用來管理各種資源的信息,比如阿里云的 ECS 等信息,因為我工作的電腦使用的是 LINUX,所以就想著用 python 寫一個命令行的管理工具,基本的功能就是同步阿里云的資源的信息到數據庫,然后可以使用命令行查詢,下面我們就來說一說關于python做炫酷表格?我們一起去了解并探討一下這個問題吧!

python做炫酷表格
# 1. 前言最近在用 Python 寫一個小工具,這個工具主要就是用來管理各種資源的信息,比如阿里云的 ECS 等信息,因為我工作的電腦使用的是 LINUX,所以就想著用 python 寫一個命令行的管理工具,基本的功能就是同步阿里云的資源的信息到數據庫,然后可以使用命令行查詢。
因為信息是展現在命令行中的,眾所周知,命令行展現復雜的文本看起來著實累人,于是就想著能像表格那樣展示,那看起來就舒服多了。
prettytable 庫就是這么一個工具,prettytable 可以打印出美觀的表格,并且對中文支持相當好(如果有試圖自己實現打印表格,你就應該知道處理中文是多么的麻煩)
# 2. 安裝prettytable 并非 python 的內置庫,通過 pip install prettytable即可安裝。
# 3. 示例我們先來看一個示例:
#!/usr/bin/python#**coding:utf-8**import sysfrom prettytable import PrettyTablereload(sys)sys.setdefaultencoding(utf8)table = PrettyTable([編號,云編號,名稱,IP地址])table.add_row([1,server01,服務器01,172.16.0.1])table.add_row([2,server02,服務器02,172.16.0.2])table.add_row([3,server03,服務器03,172.16.0.3])table.add_row([4,server04,服務器04,172.16.0.4])table.add_row([5,server05,服務器05,172.16.0.5])table.add_row([6,server06,服務器06,172.16.0.6])table.add_row([7,server07,服務器07,172.16.0.7])table.add_row([8,server08,服務器08,172.16.0.8])table.add_row([9,server09,服務器09,172.16.0.9])print(table)
以上示例運行結果如下:
linuxops@deepin:~$ python p.py ------ ---------- ---------- ------------ | 編號 | 云編號 | 名稱 | IP地址 | ------ ---------- ---------- ------------ | 1 | server01 | 服務器01 | 172.16.0.1 || 2 | server02 | 服務器02 | 172.16.0.2 || 3 | server03 | 服務器03 | 172.16.0.3 || 4 | server04 | 服務器04 | 172.16.0.4 || 5 | server05 | 服務器05 | 172.16.0.5 || 6 | server06 | 服務器06 | 172.16.0.6 || 7 | server07 | 服務器07 | 172.16.0.7 || 8 | server08 | 服務器08 | 172.16.0.8 || 9 | server09 | 服務器09 | 172.16.0.9 | ------ ---------- ---------- ------------
在以上的示例中,我們通過form導入了表格庫。table實例化了一個表格庫,并且添加了[編號,云編號,名稱,IP地址]為表頭,如果沒有添加表頭,那么會以默認的Field 編號顯示,例如:
--------- ---------- ---------- ------------ | Field 1 | Field 2 | Field 3 | Field 4 | --------- ---------- ---------- ------------
所以為更直觀看出每一列的意義,還是要添加表頭的。
# 4. 添加數據prettytable提供了多種的添加數據的方式,最常用的應該就是按行按列添加數據了。
按行添加數據 table.add_row在上面簡單的示例中,我們就是按行添加數據的。
添加的數據必須要是列表的形式,而且數據的列表長度要和表頭的長度一樣。在實際的使用中,我們應該要關注到添加的數據是否和表頭對應,這一點很重要。
按列添加數據 table.add_column()看下面的示例:
#!/usr/bin/python#**coding:utf-8**import sysfrom prettytable import PrettyTablereload(sys)sys.setdefaultencoding(utf8)table = PrettyTable()table.add_column(項目, [編號,云編號,名稱,IP地址])table.add_column(值, [1,server01,服務器01,172.16.0.1])print(table)
運行結果如下:
------- -------- ------------ | index | 項目 | 值 | ------- -------- ------------ | 1 | 編號 | 1 || 2 | 云編號 | server01 || 3 | 名稱 | 服務器01 || 4 | IP地址 | 172.16.0.1 | ------- -------- ------------
以上示例中,我們通過add_column來按列添加數據,按列添加數據不需要在實例化表格的時候制定表頭,它的表頭是在添加列的時候指定的。
table.add_column(項目, [編號,云編號,名稱,IP地址]) 這一行代碼為例,項目指定了這個列的表頭名為"項目",[編號,云編號,名稱,IP地址]為列的值,同樣為列表。
從csv文件添加數據PrettyTable不僅提供了手動按行按列添加數據,也支持直接從csv文件中讀取數據。
#!/usr/bin/python#**coding:utf-8**import sysfrom prettytable import PrettyTablefrom prettytable import from_csvreload(sys)sys.setdefaultencoding(utf8)table = PrettyTable()fp = open("res.csv", "r")table = from_csv(fp)print(table)fp.close()
如果要讀取cvs文件數據,必須要先導入from_csv,否則無法運行。上面的示例運行結果如下:
PS:csv 文件不能通過 xls 直接重命名得到,會報錯。如果是 xls 文件,請用另存為 csv 獲得 csv 文件
從sql查詢值添加從數據庫查詢出來的數據可以直接導入到表格打印,下面的例子使用了sqlite3,如果使用的是mysql也是一樣的,只要能查詢到數據就能導入到表格中。
#!/usr/bin/python#**coding:utf-8**import sysfrom prettytable import PrettyTablefrom prettytable import from_db_cursorimport sqlite3reload(sys)sys.setdefaultencoding(utf8)conn = sqlite3.connect("/tmp/aliyun.db")cur = conn.cursor()cur.execute("SELECT * FROM res")table = from_db_cursor(cur)print(table)
運行結果如下:
------ ---------- ---------- ------------ | 編號 | 云編號 | 名稱 | IP地址 | ------ ---------- ---------- ------------ | 1 | server01 | 服務器01 | 172.16.0.1 || 2 | server02 | 服務器02 | 172.16.0.2 || 3 | server03 | 服務器03 | 172.16.0.3 || 4 | server04 | 服務器04 | 172.16.0.4 || 5 | server05 | 服務器05 | 172.16.0.5 || 6 | server06 | 服務器06 | 172.16.0.6 || 7 | server07 | 服務器07 | 172.16.0.7 || 8 | server08 | 服務器08 | 172.16.0.8 || 9 | server09 | 服務器09 | 172.16.0.9 | ------ ---------- ---------- ------------
支持從html的表格中導入,請看下面這個例子:
#!/usr/bin/python#**coding:utf-8**import sysfrom prettytable import PrettyTablefrom prettytable import from_htmlreload(sys)sys.setdefaultencoding(utf8)html_string=<table><tr><th>編號</th><th>云編號</th><th>名稱</th><th>IP地址</th></tr><tr><td>1</td><td>server01</td><td>服務器01</td><td>172.16.0.1</td></tr><tr><td>2</td><td>server02</td><td>服務器02</td><td>172.16.0.2</td></tr></table>table = from_html(html_string)print(table[0])
運行結果如下:
------ ---------- ---------- ------------ | 編號 | 云編號 | 名稱 | IP地址 | ------ ---------- ---------- ------------ | 1 | server01 | 服務器01 | 172.16.0.1 || 2 | server02 | 服務器02 | 172.16.0.2 | ------ ---------- ---------- ------------
如上示例中,我們可以導入html的表格,但是不一樣的地方是print語句,使用html表格導入數據的時候print的必須是列表中的第一個元素,否則有可能會報[<prettytable.PrettyTable object at 0x7fa87feba590>]這樣的錯誤。
這是因為table并不是PrettyTable對象,而是包含單個PrettyTable對象的列表,它通過解析html而來,所以無法直接打印table,而需要打印table[0]
# 5. 表格輸出格式正如支持多種輸入一樣,表格的輸出也支持多種格式,我們在上面中的例子中已經使用了print的方式輸出,這是一種常用的輸出方式。
print直接通過print打印出表格。這種方式打印出的表格會帶邊框。
輸出HTML格式的表格print(table.get_html_string())可以打印出html標簽的表格。
在上面的例子中,使用print(table.get_html_string())會打印出如下結果:
<table> <tr> <th>編號</th> <th>云編號</th> <th>名稱</th> <th>IP地址</th> </tr> <tr> <td>1</td> <td>server01</td> <td>服務器01</td> <td>172.16.0.1</td> </tr> <tr> <td>2</td> <td>server02</td> <td>服務器02</td> <td>172.16.0.2</td> </tr></table>
prettytable在創建表格之后,你依然可以有選擇的輸出某些特定的行.
輸出指定的列print table.get_string(fields=["編號", "IP地址"])可以輸出指定的列
輸出前兩行通過print(table.get_string(start = 0, end = 2))的可以打印出指定的列,當然start和end參數讓我可以自由控制顯示區間。當然區間中包含start不包含end,是不是很熟悉這樣的用法?
根據輸出指定行列的功能,我們可以同時指定行和列來輸出,這里就不說明了。
將表格切片從上面的輸出區間,我們做一個大膽的假設,既然區間包含start不包含end這種規則和切片的一樣,我們可以不可通過切片來生成一個新的表格然后將其打印。
事實上是可以的。
new_table = table[0:2]print(new_table)如上代碼段中,我們就可以打印出0到1行共2行的表格,python的切片功能異常強大,配合切片我們可以自由的輸入任意的行。
輸出排序有時候我們需要對輸出的表格進行排序,使用print table.get_string(sortby="編號", reversesort=True)就可以對表格進行排序,其中reversesort指定了是否倒序排序,默認為False,即默認正序列排序。
sortby指定了排序的字段。
# 7. 表格的樣式內置樣式通過set_style()可以設置表格樣式,prettytable內置了多種的樣式個人覺得MSWORD_FRIENDLY,PLAIN_COLUMNS,DEFAULT 這三種樣式看起來比較清爽,在終端下顯示表格本來看起就很累,再加上一下花里胡哨的東西看起來就更累。
除了以上推薦的三種樣式以外,還有一種樣式不得不說,那就是RANDOM,這是一種隨機的樣式,每一次打印都會在內置的樣式中隨機選擇一個,比較好玩。
具體內置了幾種樣式,請各位參考官網完整自己嘗試輸出看看。
自定義樣式
#!/usr/bin/python#**coding:utf-8**import sysfrom prettytable import PrettyTablefrom prettytable import MSWORD_FRIENDLYfrom prettytable import PLAIN_COLUMNSfrom prettytable import RANDOMfrom prettytable import DEFAULTreload(sys)sys.setdefaultencoding(utf8)table = PrettyTable([編號,云編號,名稱,IP地址])table.add_row([1,server01,服務器01,172.16.0.1])table.add_row([3,server03,服務器03,172.16.0.3])table.add_row([2,server02,服務器02,172.16.0.2])table.add_row([9,server09,服務器09,172.16.0.9])table.add_row([4,server04,服務器04,172.16.0.4])table.add_row([5,server05,服務器05,172.16.0.5])table.add_row([6,server06,服務器06,172.16.0.6])table.add_row([8,server08,服務器08,172.16.0.8])table.add_row([7,server07,服務器07,172.16.0.7])table.set_style(DEFAULT)print(table)除了內置的樣式以外,PrettyTable也提供了用戶自定義,例如對齊方式,數字輸出格式,邊框連接符等等
設置對齊方式align提供了用戶設置對齊的方式,值有l,r,c方便代表左對齊,右對齊和居中 如果不設置,默認居中對齊。
控制邊框樣式在PrettyTable中,邊框由三個部分組成,橫邊框,豎邊框,和邊框連接符(橫豎交叉的鏈接符號)
如下示例:
#!/usr/bin/python#**coding:utf-8**import sysfrom prettytable import PrettyTablereload(sys)sys.setdefaultencoding(utf8)table = PrettyTable([編號,云編號,名稱,IP地址])table.add_row([1,server01,服務器01,172.16.0.1])table.add_row([3,server03,服務器03,172.16.0.3])table.add_row([2,server02,服務器02,172.16.0.2])table.add_row([9,server09,服務器09,172.16.0.9])table.add_row([4,server04,服務器04,172.16.0.4])table.add_row([5,server05,服務器05,172.16.0.5])table.add_row([6,server06,服務器06,172.16.0.6])table.add_row([8,server08,服務器08,172.16.0.8])table.add_row([7,server07,服務器07,172.16.0.7])table.align[1] = ltable.border = Truetable.junction_char=$table.horizontal_char = table.vertical_char = %print(table)table.border`控制是否顯示邊框,默認是`Truetable.junction_char控制邊框連接符
table.horizontal_char控制橫邊框符號
table.vertical_char控制豎邊框符號
上例運行如下:
$ $ $ $ $% 編號 % 云編號 % 名稱 % IP地址 %$ $ $ $ $% 1 % server01 % 服務器01 % 172.16.0.1 %% 3 % server03 % 服務器03 % 172.16.0.3 %% 2 % server02 % 服務器02 % 172.16.0.2 %% 9 % server09 % 服務器09 % 172.16.0.9 %% 4 % server04 % 服務器04 % 172.16.0.4 %% 5 % server05 % 服務器05 % 172.16.0.5 %% 6 % server06 % 服務器06 % 172.16.0.6 %% 8 % server08 % 服務器08 % 172.16.0.8 %% 7 % server07 % 服務器07 % 172.16.0.7 %$ $ $ $ $本次分享就到這了,如果對您有幫助的話,麻煩點個關注再走哦~
歡迎分享轉載→http://www.avcorse.com/read-370826.html
上一篇:傳承年俗大全(難忘年俗穿新鞋)
下一篇:紅娘是哪一部作品中的人物
Copyright ? 2024 有趣生活 All Rights Reserve吉ICP備19000289號-5 TXT地圖HTML地圖XML地圖