zoukankan      html  css  js  c++  java
  • python 库 PrettyTabble 使用与错误

    参考链接:http://zetcode.com/python/prettytable/

    PrettyTable能在python中生成ASCII 表,可以使用他控制表的很多方面,包括文本对齐、表的边框、列的宽度、对数据进行排序、选择在最后的输出中显示制定的行或者列

    支持从CSV、HTML、数据库游标中导入数据,能输出数据到ASCII 或者HTML

    安装

    pip install pTable
    

    使用

      产生一个表(通过add_row()),不用指定数据类型

    from prettytable import PrettyTable
        
    x = PrettyTable()#第一步创建对象
    
    x.field_names = ["City name", "Area", "Population", "Annual Rainfall"]#设置表头名称
    #通过 add_row()方法创建一个表
    x.add_row(["Adelaide", 1295, 1158259, 600.5])
    x.add_row(["Brisbane", 5905, 1857594, 1146.4])
    x.add_row(["Darwin", 112, 120900, 1714.7])
    x.add_row(["Hobart", 1357, 205556, 619.5])
    x.add_row(["Sydney", 2058, 4336374, 1214.8])
    x.add_row(["Melbourne", 1566, 3806092, 646.9])
    x.add_row(["Perth", 5386, 1554769, 869.4])
    
    print(x)
    

      

    $ ./create_by_row.py 
    +-----------+------+------------+-----------------+
    | 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      |
    |   Sydney  | 2058 |  4336374   |      1214.8     |
    | Melbourne | 1566 |  3806092   |      646.9      |
    |   Perth   | 5386 |  1554769   |      869.4      |
    +-----------+------+------------+-----------------+
    

      产生一个表(通过add_column())#也是先设置表头名称,然后一下添加一列关于相同的属性的不同的值

    #!/usr/bin/python3
    
    from prettytable import PrettyTable
        
    x = PrettyTable()
    
    column_names = ["City name", "Area", "Population", "Annual Rainfall"]
    
    x.add_column(column_names[0], ["Adelaide", "Brisbane", "Darwin", 
        "Hobart", "Sydney", "Melbourne", "Perth"])
    x.add_column(column_names[1], [1295, 5905, 112, 1357, 2058, 1566, 5386 ])  
    x.add_column(column_names[2], [1158259, 1857594, 120900, 205556, 4336374, 
        3806092, 1554769])  
    x.add_column(column_names[3], [600.5, 1146.4, 1714.7, 619.5, 1214.8, 
        646.9, 869.4])
    
    print(x)
    

      删除 行

      del_row()通过从零开始的索引来删除指定行

    #!/usr/bin/python3
    
    from prettytable import PrettyTable
        
    x = PrettyTable()
    
    x.field_names = ["City name", "Area", "Population", "Annual Rainfall"]
    
    x.add_row(["Adelaide", 1295, 1158259, 600.5])
    x.add_row(["Brisbane", 5905, 1857594, 1146.4])
    x.add_row(["Darwin", 112, 120900, 1714.7])
    x.add_row(["Hobart", 1357, 205556, 619.5])
    x.add_row(["Sydney", 2058, 4336374, 1214.8])
    x.add_row(["Melbourne", 1566, 3806092, 646.9])
    x.add_row(["Perth", 5386, 1554769, 869.4])
    
    x.del_row(6)
    x.del_row(5)
    x.del_row(4)
    x.del_row(3)
    
    print(x)
    #结果:
    $ ./delete_rows.py 
    +-----------+------+------------+-----------------+
    | City name | Area | Population | Annual Rainfall |
    +-----------+------+------------+-----------------+
    |  Adelaide | 1295 |  1158259   |      600.5      |
    |  Brisbane | 5905 |  1857594   |      1146.4     |
    |   Darwin  | 112  |   120900   |      1714.7     |
    +-----------+------+------------+-----------------+
    

      清空数据:

      clear_rows()清楚所有的行但是会保留当前表的列名称,而clear()清除所有的包括行和列名

    #!/usr/bin/python3
    
    from prettytable import PrettyTable
        
    x = PrettyTable()
    
    x.field_names = ["City name", "Area", "Population", "Annual Rainfall"]
    
    x.add_row(["Adelaide", 1295, 1158259, 600.5])
    x.add_row(["Brisbane", 5905, 1857594, 1146.4])
    x.add_row(["Darwin", 112, 120900, 1714.7])
    x.add_row(["Hobart", 1357, 205556, 619.5])
    x.add_row(["Sydney", 2058, 4336374, 1214.8])
    x.add_row(["Melbourne", 1566, 3806092, 646.9])
    x.add_row(["Perth", 5386, 1554769, 869.4])
    
    x.clear_rows()
    print(x)
    #输出
    $ ./clear_rows.py 
    +-----------+------+------------+-----------------+
    | City name | Area | Population | Annual Rainfall |
    +-----------+------+------------+-----------------+
    +-----------+------+------------+-----------------+
    

      对数据进行排序

      通过sortby属性,我们可以对指定的进行排序,reversesort属性控制排序的方向(升序或者降序)

    #!/usr/bin/python3
    
    from prettytable import PrettyTable
        
    x = PrettyTable()
    x.field_names = ["City name", "Area", "Population", "Annual Rainfall"]
    
    x.add_row(["Adelaide", 1295, 1158259, 600.5])
    x.add_row(["Brisbane", 5905, 1857594, 1146.4])
    x.add_row(["Darwin", 112, 120900, 1714.7])
    x.add_row(["Hobart", 1357, 205556, 619.5])
    x.add_row(["Sydney", 2058, 4336374, 1214.8])
    x.add_row(["Melbourne", 1566, 3806092, 646.9])
    x.add_row(["Perth", 5386, 1554769, 869.4])
    
    print("Table sorted by population:")
    x.sortby = "Population"
    print(x)
    
    print()
    
    print("Table sorted by city in descendig order:")
    x.sortby = "City name"
    x.reversesort = True
    print(x)
    #第一次的输出:
    $ ./sorting.py 
    Table sorted by population:
    +-----------+------+------------+-----------------+
    | City name | Area | Population | Annual Rainfall |
    +-----------+------+------------+-----------------+
    |   Darwin  | 112  |   120900   |      1714.7     |
    |   Hobart  | 1357 |   205556   |      619.5      |
    |  Adelaide | 1295 |  1158259   |      600.5      |
    |   Perth   | 5386 |  1554769   |      869.4      |
    |  Brisbane | 5905 |  1857594   |      1146.4     |
    | Melbourne | 1566 |  3806092   |      646.9      |
    |   Sydney  | 2058 |  4336374   |      1214.8     |
    +-----------+------+------------+-----------------+
    #第二次的输出
    Table sorted by city in descendig order:
    +-----------+------+------------+-----------------+
    | City name | Area | Population | Annual Rainfall |
    +-----------+------+------------+-----------------+
    |   Sydney  | 2058 |  4336374   |      1214.8     |
    |   Perth   | 5386 |  1554769   |      869.4      |
    | Melbourne | 1566 |  3806092   |      646.9      |
    |   Hobart  | 1357 |   205556   |      619.5      |
    |   Darwin  | 112  |   120900   |      1714.7     |
    |  Brisbane | 5905 |  1857594   |      1146.4     |
    |  Adelaide | 1295 |  1158259   |      600.5      |
    +-----------+------+------------+-----------------+
    

      对齐数据

      align属性控制,取值为:l、c、r

    #!/usr/bin/python3
    
    from prettytable import PrettyTable
        
    x = PrettyTable()
    
    x.field_names = ["City name", "Area", "Population", "Annual Rainfall"]
    
    x.align["City name"] = "l"#如果不指示某些特定的列就对所有的如x.align='l'#将会对所有的行
    x.align["Area"] = "r"
    x.align["Annual Rainfall"] = "r"
    
    x.add_row(["Adelaide", 1295, 1158259, 600.5])
    x.add_row(["Brisbane", 5905, 1857594, 1146.4])
    x.add_row(["Darwin", 112, 120900, 1714.7])
    x.add_row(["Hobart", 1357, 205556, 619.5])
    x.add_row(["Sydney", 2058, 4336374, 1214.8])
    x.add_row(["Melbourne", 1566, 3806092, 646.9])
    x.add_row(["Perth", 5386, 1554769, 869.4])
    
    print(x)
    #输出
    $ ./alignment.py 
    +-----------+------+------------+-----------------+
    | 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 |
    | Sydney    | 2058 |  4336374   |          1214.8 |
    | Melbourne | 1566 |  3806092   |           646.9 |
    | Perth     | 5386 |  1554769   |           869.4 |
    +-----------+------+------------+-----------------+
    

      

    get_string()方法、控制表显示什么

      这个方法返回 里面的参数对当前表的影响,他有几个选项来控制table怎样显示

      title参数为输出的表加上名字

    ---snip---
    print(x.get_string(title="Australian cities"))#就是在print里面
    
    #输出
    $ ./table_title.py 
    +-------------------------------------------------+
    |                Australian cities                |
    +-----------+------+------------+-----------------+
    | 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      |
    |   Sydney  | 2058 |  4336374   |      1214.8     |
    | Melbourne | 1566 |  3806092   |      646.9      |
    |   Perth   | 5386 |  1554769   |      869.4      |
    +-----------+------+------------+-----------------+
    

      fields参数能选择那些列将要被显示出来

    ---snip---
    print(x.get_string(fields=["City name", "Population"]))
    #输出
    $ ./select_columns.py 
    +-----------+------------+
    | City name | Population |
    +-----------+------------+
    |  Adelaide |  1158259   |
    |  Brisbane |  1857594   |
    |   Darwin  |   120900   |
    |   Hobart  |   205556   |
    |   Sydney  |  4336374   |
    | Melbourne |  3806092   |
    |   Perth   |  1554769   |
    +-----------+------------+
    

      

      通过start和end参数,我们能选择那些行将要被显示出来

    ---snip---
    print(x.get_string(start=1, end=4))
    #输出
    $ ./select_rows.py 
    +-----------+------+------------+-----------------+
    | City name | Area | Population | Annual Rainfall |
    +-----------+------+------------+-----------------+
    |  Brisbane | 5905 |  1857594   |      1146.4     |
    |   Darwin  | 112  |   120900   |      1714.7     |
    |   Hobart  | 1357 |   205556   |      619.5      |
    +-----------+------+------------+-----------------+
    

      PrettyTable还可以通过CSV、database cursor HTML 导入数据、输出数据到HTMl,参见:http://zetcode.com/python/prettytable/

      

    错误

      *)TypeError: add_row() missing 1 required positional argument: 'row'

    (sort) λ python some_sort.py
    Traceback (most recent call last):
      File "some_sort.py", line 1327, in <module>
        compared_all(collection,*func_list)
      File "some_sort.py", line 1288, in compared_all
        x.add_row(['1','2'])
    TypeError: add_row() missing 1 required positional argument: 'row'
    

      因为在创建对象的时候的语句写错了

        x=PrettyTable#这里写错了
        x=PrettyTable()
    

      

      

      

  • 相关阅读:
    jQuery遍历之siblings()
    命名空间
    AnsiString
    《linux内核完全注释》读书笔记 2
    mciSendString
    PeekMessage, GetMessage, PostMessage, SendMessage
    c/c++中运行外部程序或打开文件(转)
    定义基类和派生类
    复制构造函数
    让StringGrid控件显示下拉菜单
  • 原文地址:https://www.cnblogs.com/Gaoqiking/p/11199147.html
Copyright © 2011-2022 走看看