zoukankan      html  css  js  c++  java
  • 漂亮的输出-----prettytable和colorama的使用

    Python通过prettytable模块将输出内容如表格方式整齐输出,python本身并不内置,需要独立安装该第三方库。

    1 pip install PrettyTable
    1 #源码安装
    2 wget https://pypi.python.org/packages/source/P/PrettyTable/prettytable-0.7.2.tar.gz
    3 tar -zxvf prettytable-0.7.2.tar.gz
    4 python setup.py build
    5 python setup.py install
    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)

    colorama是一个python专门用来在控制台、命令行输出彩色文字的模块,可以跨平台使用。

    1. 安装colorama模块

    1
    pip install colorama

      

    可用格式常数:

    1
    2
    3
    Fore: BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, RESET.
    Back: BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, RESET.
    Style: DIM, NORMAL, BRIGHT, RESET_ALL

    colorama是一个python专门用来在控制台、命令行输出彩色文字的模块,可以跨平台使用,在windows下linux下都工作良好,如果你想让控制台的输出信息更漂亮一些,可以使用给这个模块。 
    colorama官方地址:https://pypi.python.org/pypi/colorama

    安装colorama模块

    pip install colorama

    使用范例

    from colorama import init,Fore init(autoreset=True) #通过使用autoreset参数可以让变色效果只对当前输出起作用,输出完成后颜色恢复默认设置 print(Fore.RED + 'welcome to www.jb51.net') print('automatically back to default color again')

    这段代码可以将 welcome to www.jb51.net 字符串以红色输出到控制台

    创建一个专门用于更改颜色的类Colored并且添加相应方法:

    from colorama import init, Fore, Back, Style
    
    init(autoreset=False)
    class Colored(object):
        #  前景色:红色  背景色:默认
        def red(self, s):
            return Fore.LIGHTRED_EX + s + Fore.RESET
        #  前景色:绿色  背景色:默认
        def green(self, s):
            return Fore.LIGHTGREEN_EX + s + Fore.RESET
        def yellow(self, s):
            return Fore.LIGHTYELLOW_EX + s + Fore.RESET
        def white(self,s):
            return Fore.LIGHTWHITE_EX + s + Fore.RESET
        def blue(self,s):
            return Fore.LIGHTBLUE_EX + s + Fore.RESET
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    现在我们使用这个类: 
    修改resolveData()函数的部分代码:

    def resolveData():
        #查询链接
        url = 'https://kyfw.12306.cn/otn/leftTicket/queryO?leftTicketDTO.train_date=2018-01-31&leftTicketDTO.from_station=XAY&leftTicketDTO.to_station=GZG&purpose_codes=ADULT'    #获取数据
        while 1:
            try:
                data = getData(url)
                lists = json.loads(data)["data"]["result"]
                break
            except:
                continue
        cont = []
        name = [
            "station_train_code",
            "from_station_name",
            'start_time',
            "lishi",
            "swz_num",
            "zy_num",
            "ze_num",
            "gr_num",
            "rw_num",
            "dw_num",
            "yw_num",
            "rz_num",
            "yz_num",
            "wz_num",
            "qt_num",
            "note_num"
        ]
        color = Colored()#创建Colored对象
        for items in lists:#遍历result的每一项
            #data字典用于存放每一车次的余票信息
            data = {
                "station_train_code": '',
                "from_station_name": '',
                "to_station_name": '',
                'start_time': '',
                'end': '',
                "lishi": '',
                "swz_num": '',
                "zy_num": '',
                "ze_num": '',
                "dw_num": '',
                "gr_num": '',
                "rw_num": '',
                "yw_num": '',
                "rz_num": '',
                "yz_num": '',
                "wz_num": '',
                "qt_num": '',
                "note_num": ''
            }
            item = items.split('|')#用"|"进行分割
            data['station_train_code'] = item[3]#车次在3号位置
            data['from_station_name'] = item[6]#始发站信息在6号位置
            data['to_station_name'] = item[7]#终点站信息在7号位置
            data['start_time'] = item[8]#出发时间信息在8号位置
            data['arrive_time'] = item[9]#抵达时间在9号位置
            data['lishi'] = item[10]#经历时间在10号位置
            data['swz_num'] = item[32] or item[25]# 特别注意:商务座在32或25位置
            data['zy_num'] = item[31]#一等座信息在31号位置
            data['ze_num'] = item[30]#二等座信息在30号位置
            data['gr_num'] = item[21]#高级软卧信息在31号位置
            data['rw_num'] = item[23]#软卧信息在23号位置
            data['dw_num'] = item[27]#动卧信息在27号位置
            data['yw_num'] = item[28]#硬卧信息在28号位置
            data['rz_num'] = item[24]#软座信息在24号位置
            data['yz_num'] = item[29]#硬座信息在29号位置
            data['wz_num'] = item[26]#无座信息在26号位置
            data['qt_num'] = item[22]#其他信息在22号位置
            if item[0] == 'null':
                data['note_num'] = item[1]
            else:
                data['note_num'] = color.white(item[1])#加高亮白色
                #如果没有信息则用“-”代替
            for pos in name:
                if data[pos] == '':
                    data[pos] = '-'
    
            cont.append(data)
        tickets = []#存放所有车次的余票信息
        #格式化添加进tickets中
        for x in cont:
            tmp = []
            for y in name:
                if y == "from_station_name":
                    s = color.green(stations2CN[x[y]]) + '
    ' + color.red(stations2CN[x["to_station_name"]])#始发站绿色,终点站红色
                    tmp.append(s)
                elif y == "start_time":
                    s = color.green(x[y]) + '
    ' + color.red(x["arrive_time"])
                    tmp.append(s)
                elif y == "station_train_code":
                    s = color.yellow(x[y])
                    tmp.append(s)
                else:
                    tmp.append(x[y])
            tickets.append(tmp)
        return tickets#返回所有车次余票信息

    测试结果: 
    这里写图片描述

  • 相关阅读:
    如何制作挖空的填空题试卷?
    原型制图工具有哪些?
    书籍推荐?来几本吧
    离线部署ELK+kafka日志管理系统【转】
    Elasticsearch5.0 安装问题集锦【转】
    在Nginx服务器上屏蔽IP
    MySQL Warning: Using a password on the command line interface can be insecure.解决办法
    不老的神器:安全扫描器Nmap渗透使用指南【转】
    MySQL数据库设置为只读及测试【转】
    Linux中切换用户变成-bash4.1-$的解决方法
  • 原文地址:https://www.cnblogs.com/klb561/p/9376038.html
Copyright © 2011-2022 走看看