从给定列表创建ASCII表 - Python

时间:2014-02-16 23:31:53

标签: python python-3.x

鉴于下表。如何使用variable.center(),variable.rjust(),variable.ljust(),%f和任何其他描述符将其转换为python中的表

  Name           Age      Height    Pay Rate   Grade
----------- ---------- ---------- ---------- ----------
John             15.00       1.20       10.00      8.00
Robert           45.00       6.70       24.00     14.00
Duncan           10.00       5.40        5.00     10.00
Steven           30.00       6.50       30.00     16.00

我想用python创建上面的表格,我将如何将上面的内容格式化为表格

1 个答案:

答案 0 :(得分:1)

有些人指出你的问题可能是重复的,但有问题的答案看起来有点旧......自从引入新的字符串格式迷你语言以来,你可以使用str.format来做这件事单独

假设您的列表如下:

data = [
    ["John"  , 15.00, 1.20, 10.00,  8.00],
    ["Robert", 45.00, 6.70, 24.00, 14.00],
    ["Duncan", 10.00, 5.40,  5.00, 10.00],
    ["Steven", 30.00, 6.50, 30.00, 16.00],
]

您可以使用格式化方法:

# Headers, centered
print("{: ^15s} {: ^15s} {: ^15s} {: ^15s} {: ^15s}".format(
    "Name", "Age", "Height", "Pay Rate", "Grade")
)

# Dashes (not very readable, but I'm lazy)
print(" ".join([("-" * 15)] * 5))

# Lines
for line in data:
    print("{:15s} {: 15.2f} {: 15.2f} {: 15.2f} {: 15.2f}".format(*line))

格式规范是(参见format specification mini-language):

format_spec ::=  [[fill]align][sign][#][0][width][,][.precision][type]
fill        ::=  <any character>
align       ::=  "<" | ">" | "=" | "^"
sign        ::=  "+" | "-" | " "
width       ::=  integer
precision   ::=  integer
type        ::=  (pretty much like printf)

^表示居中。

结果应该是:

     Name             Age           Height         Pay Rate          Grade     
--------------- --------------- --------------- --------------- ---------------
John                      15.00            1.20           10.00            8.00
Robert                    45.00            6.70           24.00           14.00
Duncan                    10.00            5.40            5.00           10.00
Steven                    30.00            6.50           30.00           16.00

让这个更短,更可重复使用留给你锻炼。