亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python利用prettytable庫(kù)輸出好看的表格

 更新時(shí)間:2022年01月23日 10:32:11   作者:程序員鑫港  
prettytable庫(kù)就是這么一個(gè)工具,prettytable可以打印出美觀的表格,并且對(duì)中文支持相當(dāng)好。本文將介紹如何通過prettytable輸出好看的表格,需要的可以參考一下

1.前言

最近在用 Python 寫一個(gè)小工具,這個(gè)工具主要就是用來管理各種資源的信息,比如阿里云的 ECS 等信息,因?yàn)槲夜ぷ鞯碾娔X使用的是 LINUX,所以就想著用 python 寫一個(gè)命令行的管理工具,基本的功能就是同步阿里云的資源的信息到數(shù)據(jù)庫(kù),然后可以使用命令行查詢。

因?yàn)樾畔⑹钦宫F(xiàn)在命令行中的,眾所周知,命令行展現(xiàn)復(fù)雜的文本看起來著實(shí)累人,于是就想著能像表格那樣展示,那看起來就舒服多了。

prettytable 庫(kù)就是這么一個(gè)工具,prettytable 可以打印出美觀的表格,并且對(duì)中文支持相當(dāng)好(如果有試圖自己實(shí)現(xiàn)打印表格,你就應(yīng)該知道處理中文是多么的麻煩)

2.安裝

prettytable 并非 python 的內(nèi)置庫(kù),通過 pip install prettytable即可安裝。

3.示例

我們先來看一個(gè)示例:

#!/usr/bin/python
#**coding:utf-8**
import sys
from prettytable import PrettyTable
reload(sys)
sys.setdefaultencoding('utf8')
 
table = PrettyTable(['編號(hào)','云編號(hào)','名稱','IP地址'])
table.add_row(['1','server01','服務(wù)器01','172.16.0.1'])
table.add_row(['2','server02','服務(wù)器02','172.16.0.2'])
table.add_row(['3','server03','服務(wù)器03','172.16.0.3'])
table.add_row(['4','server04','服務(wù)器04','172.16.0.4'])
table.add_row(['5','server05','服務(wù)器05','172.16.0.5'])
table.add_row(['6','server06','服務(wù)器06','172.16.0.6'])
table.add_row(['7','server07','服務(wù)器07','172.16.0.7'])
table.add_row(['8','server08','服務(wù)器08','172.16.0.8'])
table.add_row(['9','server09','服務(wù)器09','172.16.0.9'])
print(table)

以上示例運(yùn)行結(jié)果如下:

linuxops@deepin:~$ python p.py
+------+----------+----------+------------+
| 編號(hào) |  云編號(hào)  |   名稱   |   IP地址   |
+------+----------+----------+------------+
|  1   | server01 | 服務(wù)器01 | 172.16.0.1 |
|  2   | server02 | 服務(wù)器02 | 172.16.0.2 |
|  3   | server03 | 服務(wù)器03 | 172.16.0.3 |
|  4   | server04 | 服務(wù)器04 | 172.16.0.4 |
|  5   | server05 | 服務(wù)器05 | 172.16.0.5 |
|  6   | server06 | 服務(wù)器06 | 172.16.0.6 |
|  7   | server07 | 服務(wù)器07 | 172.16.0.7 |
|  8   | server08 | 服務(wù)器08 | 172.16.0.8 |
|  9   | server09 | 服務(wù)器09 | 172.16.0.9 |
+------+----------+----------+------------+

在以上的示例中,我們通過form導(dǎo)入了表格庫(kù)。table實(shí)例化了一個(gè)表格庫(kù),并且添加了['編號(hào)','云編號(hào)','名稱','IP地址']為表頭,如果沒有添加表頭,那么會(huì)以默認(rèn)的Field+編號(hào)顯示,例如:

+---------+----------+----------+------------+
| Field 1 | Field 2  | Field 3  |  Field 4   |
+---------+----------+----------+------------+

所以為更直觀看出每一列的意義,還是要添加表頭的。

4.添加數(shù)據(jù)

prettytable提供了多種的添加數(shù)據(jù)的方式,最常用的應(yīng)該就是按行按列添加數(shù)據(jù)了。

按行添加數(shù)據(jù) table.add_row

在上面簡(jiǎn)單的示例中,我們就是按行添加數(shù)據(jù)的。

添加的數(shù)據(jù)必須要是列表的形式,而且數(shù)據(jù)的列表長(zhǎng)度要和表頭的長(zhǎng)度一樣。在實(shí)際的使用中,我們應(yīng)該要關(guān)注到添加的數(shù)據(jù)是否和表頭對(duì)應(yīng),這一點(diǎn)很重要。

按列添加數(shù)據(jù) table.add_column()

看下面的示例:

#!/usr/bin/python
#**coding:utf-8**
import sys
from prettytable import PrettyTable
reload(sys)
sys.setdefaultencoding('utf8')
 
table = PrettyTable()
table.add_column('項(xiàng)目', ['編號(hào)','云編號(hào)','名稱','IP地址'])
table.add_column('值', ['1','server01','服務(wù)器01','172.16.0.1'])
print(table)

運(yùn)行結(jié)果如下:

+-------+--------+------------+
| index | 項(xiàng)目 |    值     |
+-------+--------+------------+
|   1   |  編號(hào)  |     1      |
|   2   | 云編號(hào) |  server01  |
|   3   |  名稱  |  服務(wù)器01   |
|   4   | IP地址 | 172.16.0.1 |
+-------+--------+------------+

以上示例中,我們通過add_column來按列添加數(shù)據(jù),按列添加數(shù)據(jù)不需要在實(shí)例化表格的時(shí)候制定表頭,它的表頭是在添加列的時(shí)候指定的。

table.add_column('項(xiàng)目', ['編號(hào)','云編號(hào)','名稱','IP地址']) 這一行代碼為例,項(xiàng)目指定了這個(gè)列的表頭名為"項(xiàng)目",['編號(hào)','云編號(hào)','名稱','IP地址']為列的值,同樣為列表。

從csv文件添加數(shù)據(jù)

PrettyTable不僅提供了手動(dòng)按行按列添加數(shù)據(jù),也支持直接從csv文件中讀取數(shù)據(jù)。

#!/usr/bin/python
#**coding:utf-8**
import sys
from prettytable import PrettyTable
from prettytable import from_csv
reload(sys)
sys.setdefaultencoding('utf8')
 
table = PrettyTable()
fp = open("res.csv", "r")
table = from_csv(fp)
print(table)
fp.close()

如果要讀取cvs文件數(shù)據(jù),必須要先導(dǎo)入from_csv,否則無法運(yùn)行。上面的示例運(yùn)行結(jié)果如下:

PS:csv 文件不能通過 xls 直接重命名得到,會(huì)報(bào)錯(cuò)。如果是 xls 文件,請(qǐng)用另存為 csv 獲得 csv 文件

從sql查詢值添加

從數(shù)據(jù)庫(kù)查詢出來的數(shù)據(jù)可以直接導(dǎo)入到表格打印,下面的例子使用了sqlite3,如果使用的是mysql也是一樣的,只要能查詢到數(shù)據(jù)就能導(dǎo)入到表格中。

#!/usr/bin/python
#**coding:utf-8**
import sys
from prettytable import PrettyTable
from prettytable import from_db_cursor
import sqlite3
reload(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)

運(yùn)行結(jié)果如下:

+------+----------+----------+------------+
| 編號(hào) |  云編號(hào)  |   名稱   |   IP地址   |
+------+----------+----------+------------+
|  1   | server01 | 服務(wù)器01 | 172.16.0.1 |
|  2   | server02 | 服務(wù)器02 | 172.16.0.2 |
|  3   | server03 | 服務(wù)器03 | 172.16.0.3 |
|  4   | server04 | 服務(wù)器04 | 172.16.0.4 |
|  5   | server05 | 服務(wù)器05 | 172.16.0.5 |
|  6   | server06 | 服務(wù)器06 | 172.16.0.6 |
|  7   | server07 | 服務(wù)器07 | 172.16.0.7 |
|  8   | server08 | 服務(wù)器08 | 172.16.0.8 |
|  9   | server09 | 服務(wù)器09 | 172.16.0.9 |
+------+----------+----------+------------+

從HTML導(dǎo)入數(shù)據(jù)

支持從html的表格中導(dǎo)入,請(qǐng)看下面這個(gè)例子:

#!/usr/bin/python
#**coding:utf-8**
import sys
from prettytable import PrettyTable
from prettytable import from_html
reload(sys)
sys.setdefaultencoding('utf8')
 
html_string='''<table>
<tr>
<th>編號(hào)</th>
<th>云編號(hào)</th>
<th>名稱</th>
<th>IP地址</th>
</tr>
<tr>
<td>1</td>
<td>server01</td>
<td>服務(wù)器01</td>
<td>172.16.0.1</td>
</tr>
<tr>
<td>2</td>
<td>server02</td>
<td>服務(wù)器02</td>
<td>172.16.0.2</td>
</tr>
</table>'''
 
table = from_html(html_string)
 
print(table[0])

運(yùn)行結(jié)果如下:

+------+----------+----------+------------+
| 編號(hào) |  云編號(hào)  |   名稱   |   IP地址   |
+------+----------+----------+------------+
|  1   | server01 | 服務(wù)器01 | 172.16.0.1 |
|  2   | server02 | 服務(wù)器02 | 172.16.0.2 |
+------+----------+----------+------------+

如上示例中,我們可以導(dǎo)入html的表格,但是不一樣的地方是print語句,使用html表格導(dǎo)入數(shù)據(jù)的時(shí)候print的必須是列表中的第一個(gè)元素,否則有可能會(huì)報(bào)[<prettytable.PrettyTable object at 0x7fa87feba590>]這樣的錯(cuò)誤。

這是因?yàn)閠able并不是PrettyTable對(duì)象,而是包含單個(gè)PrettyTable對(duì)象的列表,它通過解析html而來,所以無法直接打印table,而需要打印table[0]

5.表格輸出格式

正如支持多種輸入一樣,表格的輸出也支持多種格式,我們?cè)谏厦嬷械睦又幸呀?jīng)使用了print的方式輸出,這是一種常用的輸出方式。

print

直接通過print打印出表格。這種方式打印出的表格會(huì)帶邊框。

輸出HTML格式的表格

print(table.get_html_string())可以打印出html標(biāo)簽的表格。

在上面的例子中,使用print(table.get_html_string())會(huì)打印出如下結(jié)果:

<table>
    <tr>
        <th>編號(hào)</th>
        <th>云編號(hào)</th>
        <th>名稱</th>
        <th>IP地址</th>
    </tr>
    <tr>
        <td>1</td>
        <td>server01</td>
        <td>服務(wù)器01</td>
        <td>172.16.0.1</td>
    </tr>
    <tr>
        <td>2</td>
        <td>server02</td>
        <td>服務(wù)器02</td>
        <td>172.16.0.2</td>
    </tr>
</table>

6.選擇性輸出

prettytable在創(chuàng)建表格之后,你依然可以有選擇的輸出某些特定的行.

輸出指定的列

print table.get_string(fields=["編號(hào)", "IP地址"])可以輸出指定的列

輸出前兩行

通過print(table.get_string(start = 0, end = 2))的可以打印出指定的列,當(dāng)然start和end參數(shù)讓我可以自由控制顯示區(qū)間。當(dāng)然區(qū)間中包含start不包含end,是不是很熟悉這樣的用法?

根據(jù)輸出指定行列的功能,我們可以同時(shí)指定行和列來輸出,這里就不說明了。

將表格切片

從上面的輸出區(qū)間,我們做一個(gè)大膽的假設(shè),既然區(qū)間包含start不包含end這種規(guī)則和切片的一樣,我們可以不可通過切片來生成一個(gè)新的表格然后將其打印。

事實(shí)上是可以的。

new_table = table[0:2]
print(new_table)

如上代碼段中,我們就可以打印出0到1行共2行的表格,python的切片功能異常強(qiáng)大,配合切片我們可以自由的輸入任意的行。

輸出排序

有時(shí)候我們需要對(duì)輸出的表格進(jìn)行排序,使用print table.get_string(sortby="編號(hào)", reversesort=True)就可以對(duì)表格進(jìn)行排序,其中reversesort指定了是否倒序排序,默認(rèn)為False,即默認(rèn)正序列排序。

sortby指定了排序的字段。

7.表格的樣式

內(nèi)置樣式

通過set_style()可以設(shè)置表格樣式,prettytable內(nèi)置了多種的樣式個(gè)人覺得MSWORD_FRIENDLY,PLAIN_COLUMNS,DEFAULT 這三種樣式看起來比較清爽,在終端下顯示表格本來看起就很累,再加上一下花里胡哨的東西看起來就更累。

除了以上推薦的三種樣式以外,還有一種樣式不得不說,那就是RANDOM,這是一種隨機(jī)的樣式,每一次打印都會(huì)在內(nèi)置的樣式中隨機(jī)選擇一個(gè),比較好玩。

具體內(nèi)置了幾種樣式,請(qǐng)各位參考官網(wǎng)完整自己嘗試輸出看看。

#!/usr/bin/python
#**coding:utf-8**
import sys
from prettytable import PrettyTable
from prettytable import MSWORD_FRIENDLY
from prettytable import PLAIN_COLUMNS
from prettytable import RANDOM
from prettytable import DEFAULT
 
reload(sys)
sys.setdefaultencoding('utf8')
 
table = PrettyTable(['編號(hào)','云編號(hào)','名稱','IP地址'])
table.add_row(['1','server01','服務(wù)器01','172.16.0.1'])
table.add_row(['3','server03','服務(wù)器03','172.16.0.3'])
table.add_row(['2','server02','服務(wù)器02','172.16.0.2'])
table.add_row(['9','server09','服務(wù)器09','172.16.0.9'])
table.add_row(['4','server04','服務(wù)器04','172.16.0.4'])
table.add_row(['5','server05','服務(wù)器05','172.16.0.5'])
table.add_row(['6','server06','服務(wù)器06','172.16.0.6'])
table.add_row(['8','server08','服務(wù)器08','172.16.0.8'])
table.add_row(['7','server07','服務(wù)器07','172.16.0.7'])
table.set_style(DEFAULT)
 
print(table)

自定義樣式

除了內(nèi)置的樣式以外,PrettyTable也提供了用戶自定義,例如對(duì)齊方式,數(shù)字輸出格式,邊框連接符等等

設(shè)置對(duì)齊方式

align提供了用戶設(shè)置對(duì)齊的方式,值有l(wèi),r,c方便代表左對(duì)齊,右對(duì)齊和居中 如果不設(shè)置,默認(rèn)居中對(duì)齊。

控制邊框樣式

在PrettyTable中,邊框由三個(gè)部分組成,橫邊框,豎邊框,和邊框連接符(橫豎交叉的鏈接符號(hào))

如下示例:

#!/usr/bin/python
#**coding:utf-8**
import sys
from prettytable import PrettyTable
 
reload(sys)
sys.setdefaultencoding('utf8')
 
table = PrettyTable(['編號(hào)','云編號(hào)','名稱','IP地址'])
table.add_row(['1','server01','服務(wù)器01','172.16.0.1'])
table.add_row(['3','server03','服務(wù)器03','172.16.0.3'])
table.add_row(['2','server02','服務(wù)器02','172.16.0.2'])
table.add_row(['9','server09','服務(wù)器09','172.16.0.9'])
table.add_row(['4','server04','服務(wù)器04','172.16.0.4'])
table.add_row(['5','server05','服務(wù)器05','172.16.0.5'])
table.add_row(['6','server06','服務(wù)器06','172.16.0.6'])
table.add_row(['8','server08','服務(wù)器08','172.16.0.8'])
table.add_row(['7','server07','服務(wù)器07','172.16.0.7'])
table.align[1] = 'l'
 
table.border = True
table.junction_char='$'
table.horizontal_char = '+'
table.vertical_char = '%'

print(table)

table.border控制是否顯示邊框,默認(rèn)是True

table.junction_char控制邊框連接符

table.horizontal_char控制橫邊框符號(hào)

table.vertical_char控制豎邊框符號(hào)

上例運(yùn)行如下:

$++++++$++++++++++$++++++++++$++++++++++++$
% 編號(hào) %  云編號(hào)  %   名稱   %   IP地址   %
$++++++$++++++++++$++++++++++$++++++++++++$
%  1   % server01 % 服務(wù)器01 % 172.16.0.1 %
%  3   % server03 % 服務(wù)器03 % 172.16.0.3 %
%  2   % server02 % 服務(wù)器02 % 172.16.0.2 %
%  9   % server09 % 服務(wù)器09 % 172.16.0.9 %
%  4   % server04 % 服務(wù)器04 % 172.16.0.4 %
%  5   % server05 % 服務(wù)器05 % 172.16.0.5 %
%  6   % server06 % 服務(wù)器06 % 172.16.0.6 %
%  8   % server08 % 服務(wù)器08 % 172.16.0.8 %
%  7   % server07 % 服務(wù)器07 % 172.16.0.7 %
$++++++$++++++++++$++++++++++$++++++++++++$

以上就是Python利用prettytable庫(kù)輸出好看的表格的詳細(xì)內(nèi)容,更多關(guān)于Python prettytable的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 解決Tensorflow安裝成功,但在導(dǎo)入時(shí)報(bào)錯(cuò)的問題

    解決Tensorflow安裝成功,但在導(dǎo)入時(shí)報(bào)錯(cuò)的問題

    今天小編就為大家分享一篇解決Tensorflow安裝成功,但在導(dǎo)入時(shí)報(bào)錯(cuò)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • 淺析Python字符串中的r和u的區(qū)別

    淺析Python字符串中的r和u的區(qū)別

    在Python中,字符串前面我們經(jīng)??吹綍?huì)加一些前綴,例如u、r、b、f。這篇文章將帶大家簡(jiǎn)單了解一下字符串前加r(R)或u/(U)的前綴的區(qū)別,快來跟隨小編一起學(xué)習(xí)吧
    2021-12-12
  • pytorch forward兩個(gè)參數(shù)實(shí)例

    pytorch forward兩個(gè)參數(shù)實(shí)例

    今天小編就為大家分享一篇pytorch forward兩個(gè)參數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python接收Gmail新郵件并發(fā)送到gtalk的方法

    Python接收Gmail新郵件并發(fā)送到gtalk的方法

    這篇文章主要介紹了Python接收Gmail新郵件并發(fā)送到gtalk的方法,實(shí)例分析了Python操作郵件的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • 如何用python處理excel表格

    如何用python處理excel表格

    在本篇文章里小編給大家整理了關(guān)于python處理excel表格的詳細(xì)步驟內(nèi)容,需要的朋友們可以參考下。
    2020-06-06
  • 基于Python實(shí)現(xiàn)圖片主題色的提取

    基于Python實(shí)現(xiàn)圖片主題色的提取

    在?Groove?音樂中,當(dāng)我們改變歌曲時(shí),底部播放欄的顏色會(huì)隨專輯封面而變,這就是提取了主題色。本文將利用Python實(shí)現(xiàn)圖片主題色的提取,感興趣的可以了解一下
    2022-03-03
  • Python數(shù)據(jù)清洗&預(yù)處理入門教程

    Python數(shù)據(jù)清洗&預(yù)處理入門教程

    凡事預(yù)則立,不預(yù)則廢,訓(xùn)練機(jī)器學(xué)習(xí)模型也是如此。數(shù)據(jù)清洗和預(yù)處理是模型訓(xùn)練之前的必要過程,否則模型可能就廢了。本文是一個(gè)初學(xué)者指南,將帶你領(lǐng)略如何在任意的數(shù)據(jù)集上,針對(duì)任意一個(gè)機(jī)器學(xué)習(xí)模型,完成數(shù)據(jù)預(yù)處理工作
    2022-10-10
  • Python API 操作Hadoop hdfs詳解

    Python API 操作Hadoop hdfs詳解

    這篇文章主要介紹了Python API 操作Hadoop hdfs詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 跟老齊學(xué)Python之玩轉(zhuǎn)字符串(3)

    跟老齊學(xué)Python之玩轉(zhuǎn)字符串(3)

    字符串是一個(gè)很長(zhǎng)的話題,縱然現(xiàn)在開始第三部分,但是也不能完全說盡。因?yàn)樽址亲匀徽Z言中最復(fù)雜的東西,也是承載功能最多的,計(jì)算機(jī)高級(jí)語言編程,要解決自然語言中的問題,讓自然語言中完成的事情在計(jì)算機(jī)上完成,所以,也不得不有更多的話題。
    2014-09-09
  • python 批量將PPT導(dǎo)出成圖片集的案例

    python 批量將PPT導(dǎo)出成圖片集的案例

    這篇文章主要介紹了python 批量將PPT導(dǎo)出成圖片集的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03

最新評(píng)論