create account

Python PrettyTable 模块学习 (格式化打印内容) by oflyhigh

View this thread on: hive.blogpeakd.comecency.com
· @oflyhigh ·
$124.89
Python PrettyTable 模块学习 (格式化打印内容)
![](https://steemitimages.com/DQmcXykUFo6aLJ3aC9Ga3sfZsnh7ZsYzXheXSGEfKANdM2g/image.png)

今天在处理某些数据时,需要将数据显示出来。

结果我遇到一个问题,数据内容可以看成是一个表格,我在使用for循环逐行显示出来,显示出来的数据是这个样子:
![](https://steemitimages.com/DQmVXZih7VygBqHyvK6Uj3Fxafbgo8pMMmL46nkPqixvzPq/image.png)

好吧,如果我没有上年纪,眼睛又不花,并且有足够的时间和耐心,我觉得这数据还是有一点点意义的。但是如果遇到没有耐心的朋友,看到***这坨***数据,可能就会在心里不由自主地骂一句。

为了不被朋友骂,我将数据显示得漂漂亮亮的。那么如何才能让数据显示的漂亮一点呢?

# 放弃自己造轮子

我首先想到的是自己造轮子。比如说用***`\t`***,来分割数据。但是有时候一列里数据有长有短,那么可能有的需要***`\t`***两次,有的一次就够,那么我是不是要计算一下数据长度呢?短的就跳两次三次,长的则跳一次。然后是不是还有左对齐、右对齐的问题?那么我还是计算,然后通过在前边或者后边补空格实现对齐处理。还有加表头,分隔符等等等,好吧,我承认,我已经晕鸟。

既然自己造轮子,能力有限,造不出来,那么有没有现成的轮子可用呢?我记得无论是steempy还是uptick显示数据可都挺美观的。于是看了一下uptick中的代码,找到这样一句:
`from prettytable import PrettyTable`
原来它使用的是一个叫做PrettyTable的模块。

比如显示配置信息的时候:
![](https://steemitimages.com/DQmb6bsVXH25yuFyU5fcA85MV2kn5ihznzhA5ATJfKPWA3R/image.png)
代码看起来很简单嘛。

咱也试试

# PrettyTable 安装以及使用

#### 安装
使用以下命令安装PrettyTable
`pip install prettytable`

因为uptick已经帮我安装了这个,所以提示:
>Requirement already satisfied: prettytable in ./venv/lib/python3.6/site-packages

#### 使用

使用也很简单,我从[这里](https://stackoverflow.com/questions/18911984/align-column-names-with-data-in-a-csv-file-using-python)找了个例子:
```
from prettytable import PrettyTable

# Initialize the object passing the table headers
t = PrettyTable(['A', 'B', 'C'])

t.align='l'
t.border=False

t.add_row([111,222,333])
t.add_row([444,555,666])
t.add_row(['longer text',777,'even longer text here'])
print str(t)
```
以上代码很好理解,先是导入模块设置表头,然后设置样式,然后逐行添加数据,然后显示。

Python3上需要把`print str(t)`改成`print(str(t))`
以上代码执行效果如下:
![](https://steemitimages.com/DQmc9NYEuVZaoWrMXyPbvZ2kKsnCWeDb3sGk9Abh7QtWDhm/image.png)

# 应用到自己程序里

学会了PrettyTable的使用以后,我就把它应用到我的代码里去。我的一坨内容终于变得漂漂亮亮了,你猜猜这是啥?

![](https://steemitimages.com/DQmegxAczJQLNPDQkTijm4so8FSdk1RzqaoLP3rS5XNxKoa/image.png)

或许你看到我将PrettyTable应用到我的程序里很简单,实际上则是一波三折啊。

#### str转换

我的一坨代码之前都可以用print显示。但是将数据用`t.add_row()`的方式加进来以后,却提示出错。原因是print(var)会自动将其转换,而`t.add_row([var1, var2])`则不进行转换。

为了解决这个问题,需要进行类似`t.add_row([str(var1), str(var2)])`的处理。

#### 格式设置

PrettyTable默认格式应该是居中,但是 Collateral和 Debt条目居中显示非常难以阅读。
![](https://steemitimages.com/DQmPeCXLyoD7eaRqP8ySXBZJKEd3uqqUDpjm2RSnuUDS44b/image.png)

于是我通过
***`t.align["Collateral"] = "r"`***
***`t.align["Debt"] = "r"`***
设置这两列为右对齐
然而无论我怎么试,它也不生效。我去搜索PrettyTable格式设置不生效,不起作用等等,搜了半天也没找到解决方案。

最后,当我打算放弃时,我发现原来是我一直在A.py上修改,然后运行的是B.py 😳

# 总结

* 不要尝试自己制造轮子
* PrettyTable 模块格式化打印内容非常简单简单好用
* 遇到灵异事件时不要轻易放弃😳

# 参考链接
* https://stackoverflow.com/questions/18911984/align-column-names-with-data-in-a-csv-file-using-python
* https://pypi.python.org/pypi/PrettyTable
* http://blog.csdn.net/codeway3d/article/details/52798804

封面图源:https://pixabay.com
👍  , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , and 97 others
properties (23)
authoroflyhigh
permlinkpython-prettytable
categorypython
json_metadata{"tags":["python","prettytable","cn-programming","cn"],"image":["https://steemitimages.com/DQmcXykUFo6aLJ3aC9Ga3sfZsnh7ZsYzXheXSGEfKANdM2g/image.png","https://steemitimages.com/DQmVXZih7VygBqHyvK6Uj3Fxafbgo8pMMmL46nkPqixvzPq/image.png","https://steemitimages.com/DQmb6bsVXH25yuFyU5fcA85MV2kn5ihznzhA5ATJfKPWA3R/image.png","https://steemitimages.com/DQmc9NYEuVZaoWrMXyPbvZ2kKsnCWeDb3sGk9Abh7QtWDhm/image.png","https://steemitimages.com/DQmegxAczJQLNPDQkTijm4so8FSdk1RzqaoLP3rS5XNxKoa/image.png","https://steemitimages.com/DQmPeCXLyoD7eaRqP8ySXBZJKEd3uqqUDpjm2RSnuUDS44b/image.png"],"links":["https://stackoverflow.com/questions/18911984/align-column-names-with-data-in-a-csv-file-using-python","https://pypi.python.org/pypi/PrettyTable","http://blog.csdn.net/codeway3d/article/details/52798804","https://pixabay.com"],"app":"steemit/0.1","format":"markdown"}
created2017-12-24 12:52:24
last_update2017-12-24 12:52:24
depth0
children10
last_payout2017-12-31 12:52:24
cashout_time1969-12-31 23:59:59
total_payout_value102.017 HBD
curator_payout_value22.870 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length2,665
author_reputation6,302,571,491,231,543
root_title"Python PrettyTable 模块学习 (格式化打印内容)"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id25,013,740
net_rshares23,000,460,635,084
author_curate_reward""
vote details (161)
@arahim95 ·
![Happy-merry-Christmas-day-wallpaper-downloads-photo-happy-merry-Christmas-wallpaper-download-picture-images-of-happy-Christmas-day-05.jpg](https://steemitimages.com/DQmd3hqHnFTaPgPN8n1TynLcDqcV3fchMfRyeip1BZT9u4V/Happy-merry-Christmas-day-wallpaper-downloads-photo-happy-merry-Christmas-wallpaper-download-picture-images-of-happy-Christmas-day-05.jpg)
properties (22)
authorarahim95
permlinkre-oflyhigh-python-prettytable-20171224t190714221z
categorypython
json_metadata{"tags":["python"],"image":["https://steemitimages.com/DQmd3hqHnFTaPgPN8n1TynLcDqcV3fchMfRyeip1BZT9u4V/Happy-merry-Christmas-day-wallpaper-downloads-photo-happy-merry-Christmas-wallpaper-download-picture-images-of-happy-Christmas-day-05.jpg"],"app":"steemit/0.1"}
created2017-12-24 19:07:15
last_update2017-12-24 19:07:15
depth1
children0
last_payout2017-12-31 19:07:15
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length353
author_reputation-6,854,752,636
root_title"Python PrettyTable 模块学习 (格式化打印内容)"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id25,064,003
net_rshares0
@basham ·
i dont understand this language but i really appreciate for the hard work . good job
properties (22)
authorbasham
permlinkre-oflyhigh-python-prettytable-20171224t142914547z
categorypython
json_metadata{"tags":["python"],"app":"steemit/0.1"}
created2017-12-24 14:29:03
last_update2017-12-24 14:29:03
depth1
children0
last_payout2017-12-31 14:29:03
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length84
author_reputation342,488,050,212
root_title"Python PrettyTable 模块学习 (格式化打印内容)"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id25,026,367
net_rshares0
@btcnesw ·
嗯,遇到灵异事件时不要轻易放弃,说不定是女神或仙女在招手呢~
properties (22)
authorbtcnesw
permlinkre-oflyhigh-python-prettytable-20171225t100709333z
categorypython
json_metadata{"tags":["python"],"app":"steemit/0.1"}
created2017-12-25 10:07:12
last_update2017-12-25 10:07:12
depth1
children0
last_payout2018-01-01 10:07:12
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length30
author_reputation-83,560,842,068
root_title"Python PrettyTable 模块学习 (格式化打印内容)"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id25,146,152
net_rshares0
@coldhair ·
嗯,遇到灵异事件时不要轻易放弃,说不定是女神或仙女在招手呢~
properties (22)
authorcoldhair
permlinkre-oflyhigh-python-prettytable-20171224t133607130z
categorypython
json_metadata{"tags":["python"],"app":"steemit/0.1"}
created2017-12-24 13:34:18
last_update2017-12-24 13:34:18
depth1
children0
last_payout2017-12-31 13:34:18
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length30
author_reputation34,617,352,014,488
root_title"Python PrettyTable 模块学习 (格式化打印内容)"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id25,019,119
net_rshares0
@framethinker ·
好厉害,这水平可以当黑客啦
👍  
properties (23)
authorframethinker
permlinkre-oflyhigh-python-prettytable-20171224t133211297z
categorypython
json_metadata{"tags":["python"],"app":"steemit/0.1"}
created2017-12-24 13:32:09
last_update2017-12-24 13:32:09
depth1
children0
last_payout2017-12-31 13:32:09
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length13
author_reputation44,019,981,197
root_title"Python PrettyTable 模块学习 (格式化打印内容)"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id25,018,859
net_rshares98,755,200
author_curate_reward""
vote details (1)
@leftbank ·
$0.10
“在A.py上修改,然后运行的是B.py” 来握个手
👍  
properties (23)
authorleftbank
permlinkre-oflyhigh-python-prettytable-20171224t135053505z
categorypython
json_metadata{"tags":["python"],"app":"steemit/0.1"}
created2017-12-24 13:50:54
last_update2017-12-24 13:50:54
depth1
children0
last_payout2017-12-31 13:50:54
cashout_time1969-12-31 23:59:59
total_payout_value0.104 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length26
author_reputation55,043,916,818,247
root_title"Python PrettyTable 模块学习 (格式化打印内容)"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id25,021,285
net_rshares19,655,668,025
author_curate_reward""
vote details (1)
@lydiachan ·
遇到靈異事件,我通常都會先暈一會兒~
properties (22)
authorlydiachan
permlinkre-oflyhigh-python-prettytable-20171225t101330797z
categorypython
json_metadata{"tags":["python"],"app":"steemit/0.1"}
created2017-12-25 10:13:30
last_update2017-12-25 10:13:30
depth1
children0
last_payout2018-01-01 10:13:30
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length18
author_reputation38,600,108,764,289
root_title"Python PrettyTable 模块学习 (格式化打印内容)"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id25,146,812
net_rshares0
@polaleye50 ·
$0.03
@oflyhigh please translate to English version too,  want to know about this.  Thanks.  Merry Xmas!
👍  ,
properties (23)
authorpolaleye50
permlinkre-oflyhigh-python-prettytable-20171224t131603900z
categorypython
json_metadata{"tags":["python"],"users":["oflyhigh"],"app":"steemit/0.1"}
created2017-12-24 13:16:09
last_update2017-12-24 13:16:09
depth1
children0
last_payout2017-12-31 13:16:09
cashout_time1969-12-31 23:59:59
total_payout_value0.026 HBD
curator_payout_value0.005 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length98
author_reputation15,726,060,928,290
root_title"Python PrettyTable 模块学习 (格式化打印内容)"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id25,016,704
net_rshares6,317,077,251
author_curate_reward""
vote details (2)
@sanzuwu ·
看着好复杂
properties (22)
authorsanzuwu
permlinkre-oflyhigh-python-prettytable-20171226t041658913z
categorypython
json_metadata{"tags":["python"],"app":"steemit/0.1"}
created2017-12-26 04:16:51
last_update2017-12-26 04:16:51
depth1
children0
last_payout2018-01-02 04:16:51
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length5
author_reputation198,441,001,337
root_title"Python PrettyTable 模块学习 (格式化打印内容)"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id25,269,155
net_rshares0
@thetravel13 ·
is it binary ???
properties (22)
authorthetravel13
permlinkre-oflyhigh-python-prettytable-20171224t125508739z
categorypython
json_metadata{"tags":["python"],"app":"steemit/0.1"}
created2017-12-24 12:55:09
last_update2017-12-24 12:55:09
depth1
children0
last_payout2017-12-31 12:55:09
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length16
author_reputation50,771,046,881
root_title"Python PrettyTable 模块学习 (格式化打印内容)"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd0
post_id25,014,069
net_rshares0