Printing Lists as Tabular Data

后端 未结 14 2045
小蘑菇
小蘑菇 2020-11-21 06:38

I am quite new to Python and I am now struggling with formatting my data nicely for printed output.

I have one list that is used for two headings, and a matrix that

14条回答
  •  清酒与你
    2020-11-21 07:16

    There are some light and useful python packages for this purpose:

    1. tabulate: https://pypi.python.org/pypi/tabulate

    from tabulate import tabulate
    print(tabulate([['Alice', 24], ['Bob', 19]], headers=['Name', 'Age']))
    
    Name      Age
    ------  -----
    Alice      24
    Bob        19
    

    tabulate has many options to specify headers and table format.

    print(tabulate([['Alice', 24], ['Bob', 19]], headers=['Name', 'Age'], tablefmt='orgtbl'))
    
    | Name   |   Age |
    |--------+-------|
    | Alice  |    24 |
    | Bob    |    19 |
    

    2. PrettyTable: https://pypi.python.org/pypi/PrettyTable

    from prettytable import PrettyTable
    t = PrettyTable(['Name', 'Age'])
    t.add_row(['Alice', 24])
    t.add_row(['Bob', 19])
    print(t)
    
    +-------+-----+
    |  Name | Age |
    +-------+-----+
    | Alice |  24 |
    |  Bob  |  19 |
    +-------+-----+
    

    PrettyTable has options to read data from csv, html, sql database. Also you are able to select subset of data, sort table and change table styles.

    3. texttable: https://pypi.python.org/pypi/texttable

    from texttable import Texttable
    t = Texttable()
    t.add_rows([['Name', 'Age'], ['Alice', 24], ['Bob', 19]])
    print(t.draw())
    
    +-------+-----+
    | Name  | Age |
    +=======+=====+
    | Alice | 24  |
    +-------+-----+
    | Bob   | 19  |
    +-------+-----+
    

    with texttable you can control horizontal/vertical align, border style and data types.

    4. termtables: https://github.com/nschloe/termtables

    import termtables as tt
    
    string = tt.to_string(
        [["Alice", 24], ["Bob", 19]],
        header=["Name", "Age"],
        style=tt.styles.ascii_thin_double,
        # alignment="ll",
        # padding=(0, 1),
    )
    print(string)
    
    +-------+-----+
    | Name  | Age |
    +=======+=====+
    | Alice | 24  |
    +-------+-----+
    | Bob   | 19  |
    +-------+-----+
    

    with texttable you can control horizontal/vertical align, border style and data types.

    Other options:

    • terminaltables Easily draw tables in terminal/console applications from a list of lists of strings. Supports multi-line rows.
    • asciitable Asciitable can read and write a wide range of ASCII table formats via built-in Extension Reader Classes.

提交回复
热议问题