前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python3之PrettyTable模块(美化库)

Python3之PrettyTable模块(美化库)

作者头像
周小董
发布2019-03-25 11:24:26
2.1K0
发布2019-03-25 11:24:26
举报
文章被收录于专栏:python前行者

安装:pip install PrettyTable

代码语言:javascript
复制
# -*- coding:utf-8 -*-
from prettytable import PrettyTable

x = PrettyTable(field_names=["name", "age", "sex", "money"])
x.align["name"] = "l"  # 以name字段左对齐
x.padding_width = 1   # 填充宽度
x.add_row(["wang",20, "man", 1000])
x.add_row(["alex",21, "man", 2000])
x.add_row(["peiqi",22, "man", 3000])
# print(x)
#表排序
print(x.get_string(sortby="money", reversesort=True))
#自带样式打印,参数还可以选择“DEFAULT”、“PLAIN_COLUMNS”
# print(x.set_style(MSWORD_FRIENDLY))
'''
+-------+-----+-----+-------+
|  name | age | sex | money |
+-------+-----+-----+-------+
|  wang |  20 | man |  1000 |
|  alex |  21 | man |  2000 |
| peiqi |  22 | man |  3000 |
+-------+-----+-----+-------+
'''

from prettytable import PrettyTable

pt = PrettyTable()
pt.field_names = [i for i in range(1, 10)]
mulp = [["{b}x{a}={c}".format(a=a, b=b, c=a * b) if a >= b else "" for b in range(1, 10)] for a in range(1, 10)]
for mu in mulp: pt.add_row(mu)
print(pt)
'''
+-------+--------+--------+--------+--------+--------+--------+--------+--------+
|   1   |   2    |   3    |   4    |   5    |   6    |   7    |   8    |   9    |
+-------+--------+--------+--------+--------+--------+--------+--------+--------+
| 1x1=1 |        |        |        |        |        |        |        |        |
| 1x2=2 | 2x2=4  |        |        |        |        |        |        |        |
| 1x3=3 | 2x3=6  | 3x3=9  |        |        |        |        |        |        |
| 1x4=4 | 2x4=8  | 3x4=12 | 4x4=16 |        |        |        |        |        |
| 1x5=5 | 2x5=10 | 3x5=15 | 4x5=20 | 5x5=25 |        |        |        |        |
| 1x6=6 | 2x6=12 | 3x6=18 | 4x6=24 | 5x6=30 | 6x6=36 |        |        |        |
| 1x7=7 | 2x7=14 | 3x7=21 | 4x7=28 | 5x7=35 | 6x7=42 | 7x7=49 |        |        |
| 1x8=8 | 2x8=16 | 3x8=24 | 4x8=32 | 5x8=40 | 6x8=48 | 7x8=56 | 8x8=64 |        |
| 1x9=9 | 2x9=18 | 3x9=27 | 4x9=36 | 5x9=45 | 6x9=54 | 7x9=63 | 8x9=72 | 9x9=81 |
+-------+--------+--------+--------+--------+--------+--------+--------+--------+
'''

#一行打印九九乘法表
print ('\n'.join([' '.join(['%s*%s=%-2s' % (j,i,i*j) for j in range(1,i+1)]) for i in range(1,10)]))
'''
1*1=1 
1*2=2  2*2=4 
1*3=3  2*3=6  3*3=9 
1*4=4  2*4=8  3*4=12 4*4=16
1*5=5  2*5=10 3*5=15 4*5=20 5*5=25
1*6=6  2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7  2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8  2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9  2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
'''

创建表

直接创建

代码语言:javascript
复制
pt = PrettyTable()

从已有文件创建

  • CSV
代码语言:javascript
复制
from prettytable import from_csv 
fp = open("mytable.csv", "r") 
pt = from_csv(fp) 
fp.close()
  • HTML
代码语言:javascript
复制
from prettytable import from_html 
pts = from_html(html_string)
  • SQL
代码语言:javascript
复制
from prettytable import from_db_cursor 
db_cur.execute("SELECT * FROM mytable") 
pt = from_db_cursor(db_cur)

添加元素

  • 按行添加
代码语言:javascript
复制
pt.add_row()
  • 按列添加
代码语言:javascript
复制
pt.add_column()

输出格式

ASCII码表

  • 直接输出
代码语言:javascript
复制
print(pt)
  • 无表格框输出
代码语言:javascript
复制
print(pt.get_string())
  • HTML表
代码语言:javascript
复制
print(pt.get_html_string())
  • 选择子表
代码语言:javascript
复制
print(pt.get_string(fields = ["City name", "Population"]))
  • 输出前4列
代码语言:javascript
复制
print(pt.get_string(start = 0, end = 3))
代码语言:javascript
复制
new_table = old_table[0:3]
print(new_table)
  • 表排序
代码语言:javascript
复制
print(x.get_string(sortby="Annual Rainfall", reversesort=True))

控制表样式

  • 自带样式
代码语言:javascript
复制
#参数还可以选择“DEFAULT”、“PLAIN_COLUMNS”
from prettytable import MSWORD_FRIENDLY
x.set_style(MSWORD_FRIENDLY) 
print(x)
手动控制样式
  • 可调整选项

摘自prettytable文档

  • border - 布尔类型参数(必须是True或False)。控制表格边框是否显示。
  • header - 布尔类型参数(必须是True或False)。控制表格第一行是否作为表头显示。
  • header-style - 控制表头信息的大小写。允许的参数值:“cap”(每个单词首字母大写),“title”(除了介词助词首字母大写),“lower”(全部小写)或者None(不改变原内容格式)。默认参数为None。
  • hrules - 设置表格内部水平边线。允许的参数值:FRAME,ALL,NONE。注意这些是在prettytable模块内部定义的变量,在使用之前导入或用类似prettytable.FRAME的方法调用。
  • vrules - 设置表格内部竖直边线。允许的参数值:FRAME,ALL,NONE。
  • align - 水平对齐方式(None,“l”(左对齐),“c”(居中),“r”右对齐)
  • valign - 垂直对齐方式(None,“t”(顶部对齐),“m”(居中),“b”底部对齐)
  • int_format - 控制整型数据的格式。
  • float_format - 控制浮点型数据的格式。
  • padding_width - 列数据左右的空格数量。(当左右padding未设置时生效)
  • left_padding_width - 列数据左侧的空格数量。
  • right_padding_width - 列数据右侧的空格数量。
  • vertical_char - 绘制竖直边线的字符,默认为“|”
  • horizontal_char - 绘制水平边线的字符,默认为“-”
  • junction_char - 绘制水平竖直交汇点的字符,默认为“+”

两种设置方式等效

代码语言:javascript
复制
x = PrettyTable() 
x.border = False 
x.header = False 
x.padding_width = 5

or 

x = PrettyTable(border=False, header=False, padding_width=5)
  • 调整对齐方式的几种方法
代码语言:javascript
复制
print(x.get_string(align="l"))

x.align["City name"] = "l" 
x.align["Population"] = "c" 
x.align["Area"] = "r"

x.align = "l'
代码语言:javascript
复制
# -*- coding:utf-8 -*-
import requests
import re
import argparse
from bs4 import BeautifulSoup
from prettytable import PrettyTable

parser = argparse.ArgumentParser()
parser.add_argument('-c', '--city', default='hangzhou')
args = parser.parse_args()
city = args.city

url = 'http://weather.sina.com.cn/' + city
response = requests.get(url)
response.encoding = 'utf-8'
soup = BeautifulSoup(response.text, 'html.parser')

city = soup.find(class_='slider_ct_name').string
date = []
weather = []
temperature = []

pt = PrettyTable(['date', 'daytime', 'night', 'tempeature'])
pt.align['date'] = '1'
# get date
for item in soup('p', class_='wt_fc_c0_i_date'):
    date.append(bytes.decode(item.string.encode('utf-8')))
# get weather
for item in soup("img", {"class": 'icons0_wt'}):
    weather.append(bytes.decode(item['alt'].encode('utf-8')))
# get temperature
for item in soup('p', class_='wt_fc_c0_i_temp'):
    temperature.append(bytes.decode(item.string.encode('utf-8')))

# make table
for counter in range(7):
    currow = []
    currow.append(date[counter])
    currow.append(weather[2 * counter])
    currow.append(weather[2 * counter + 1])
    currow.append(temperature[counter])
    pt.add_row(currow)
print(pt)
filename = city + '7日天气' + '.txt'
with open(filename, 'w') as fp:
    fp.write('\t\t\t' + city + '7日天气\n')
    fp.write(str(pt))

结果:

代码语言:javascript
复制
+-------+---------+-------+-------------+
|  date | daytime | night |  tempeature |
+-------+---------+-------+-------------+
| 08-06 |    晴   |   晴  | 37°C / 27°C |
| 08-07 |   多云  |   晴  | 36°C / 27°C |
| 08-08 |   多云  |   晴  | 35°C / 26°C |
| 08-09 |    晴   |   晴  | 36°C / 27°C |
| 08-10 |    晴   |  多云 | 37°C / 27°C |
| 08-11 |   多云  |  多云 | 36°C / 27°C |
| 08-12 |   多云  |  多云 | 36°C / 27°C |
+-------+---------+-------+-------------+

参考:https://blog.csdn.net/u013630675/article/details/78773356

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年08月06日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建表
  • 添加元素
  • 输出格式
  • 控制表样式
    • 手动控制样式
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档