使用Python的漂亮打印机?

使用Python的漂亮打印机?,python,pretty-print,Python,Pretty Print,我有一个标签列表,数据如下 ['id', 'Version', 'chip_name', 'xversion', 'device', 'opt_param', 'place_effort'] [1, 1.0, u'virtex2', u'xilinx11.5', u'xc5vlx50', u'Speed', u'High'] 这就是结果 +----+---------+-----------+------------+----------+-----------+--------------+

我有一个标签列表,数据如下

['id', 'Version', 'chip_name', 'xversion', 'device', 'opt_param', 'place_effort'] [1, 1.0, u'virtex2', u'xilinx11.5', u'xc5vlx50', u'Speed', u'High'] 这就是结果

+----+---------+-----------+------------+----------+-----------+--------------+ | id | Version | chip_name | xversion | device | opt_param | place_effort | +====+=========+===========+============+==========+===========+==============+ | 1 | 1.0 | virtex2 | xilinx11.5 | xc5vlx50 | Speed | High | | 2 | 1.0 | virtex2 | xilinx11.5 | xc5vlx50 | Speed | High | +----+---------+-----------+------------+----------+-----------+--------------+ +----+---------+-----------+------------+----------+-----------+--------------+ |id |版本|芯片|名称| xversion |设备|选项|参数|放置|| +====+=========+===========+============+==========+===========+==============+ |1 | 1.0 | virtex2 | xilinx11.5 | xc5vlx50 |速度|高| |2 | 1.0 | virtex2 | xilinx11.5 | xc5vlx50 |速度|高| +----+---------+-----------+------------+----------+-----------+--------------+ 谢谢你的帮助。

类似这样的内容:

labels = ['id', 'Version', 'chip_name', 'xversion', 'device', 'opt_param', 
    'place_effort']
values = [1, 1.0, u'virtex2', u'xilinx11.5', u'xc5vlx50', u'Speed', u'High']

paddedLabels = []
paddedValues = []

for label, value in zip(labels, values):
    value = str(value)
    columnWidth = max(len(label), len(value))
    paddedLabels.append(label.center(columnWidth))
    paddedValues.append(value.center(columnWidth))

print ' '.join(paddedLabels)
print ' '.join(paddedValues)
输出:

id Version chip_name  xversion   device  opt_param place_effort
1    1.0    virtex2  xilinx11.5 xc5vlx50   Speed       High
+----+---------+-----------+------------+----------+-----------+--------------+
| id | Version | chip_name |  xversion  |  device  | opt_param | place_effort |
+====+=========+===========+============+==========+===========+==============+
| 1  |   1.0   |  virtex2  | xilinx11.5 | xc5vlx50 |   Speed   |     High     |
+----+---------+-----------+------------+----------+-----------+--------------+
如果你想变得花哨,那么就做好准备:

输出:

id Version chip_name  xversion   device  opt_param place_effort
1    1.0    virtex2  xilinx11.5 xc5vlx50   Speed       High
+----+---------+-----------+------------+----------+-----------+--------------+
| id | Version | chip_name |  xversion  |  device  | opt_param | place_effort |
+====+=========+===========+============+==========+===========+==============+
| 1  |   1.0   |  virtex2  | xilinx11.5 | xc5vlx50 |   Speed   |     High     |
+----+---------+-----------+------------+----------+-----------+--------------+

在内容打印出来之前,使用ljust填充内容

import sys

def maxwidth(table, index):
    """Get the maximum width of the given column index"""
    return max([len(str(row[index])) for row in table])

def pprint_table(table):
    colpad = []

    for i in range(len(table[0])):
        colpad.append(maxwidth(table, i))

    for row in table:
        print str(row[0]).ljust(colpad[0] + 1),
        for i in range(1, len(row)):
            col = str(row[i]).rjust(colpad[i] + 2)
            print "", col,
        print ""

a = ['id', 'Version', 'chip_name', 'xversion', 'device', 'opt_param', 'place_effort']
b = [1, 1.0, u'virtex2', u'xilinx11.5', u'xc5vlx50', u'Speed', u'High']

# Put it in the table

c = [a, b]

pprint_table(c)
输出:

id     Version    chip_name      xversion      device    opt_param    place_effort 
1          1.0      virtex2    xilinx11.5    xc5vlx50        Speed            High

另一个解决方案是根本不使用制表符,而是使用空格来调整列宽,也不需要手动填充,因为“%Ns”字符串格式很方便,例如

header = ['id', 'Version', 'chip_name', 'xversion', 'device', 'opt_param', 'place_effort']
rows = [[1, 1.0, u'virtex2', u'xilinx11.5', u'xc5vlx50', u'Speed', u'High']]

def print_row(row):
    column_width=12
    format_str = ("%-"+str(column_width)+"s")*len(row)
    print format_str%tuple(row)

print_row(header)
for row in rows:
    print_row(row)
输出:

id          Version     chip_name   xversion    device      opt_param   place_effort
1           1.0         virtex2     xilinx11.5  xc5vlx50    Speed       High
你可以试试这个

>>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 7678}
>>> for name, phone in table.items():
...     print '{0:10} ==> {1:10d}'.format(name, phone)
...
Jack       ==>       4098
Dcab       ==>       7678
Sjoerd     ==>       4127

后面的整数是填充

或者更好

>>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
>>> print ('Jack: {0[Jack]:d}; Sjoerd: {0[Sjoerd]:d}; '
...        'Dcab: {0[Dcab]:d}'.format(table))
Jack: 4098; Sjoerd: 4127; Dcab: 8637678

您可以使用ready解决方案:


其他解决方案,请参阅我的类似问题和其他答案:

快速解决方案,如果ln是包含所有这些列表的列表

for l in ln:
    print "\t".join([str(x).ljust(10) for x in l])

将打印按制表符分隔并左对齐的列。如果L中的值还不太合适,请增加它。

如果值的长度不同,则会导致列宽不均匀。您需要找到所有值的最大值(以及标题标签)才能知道每个列的宽度。我假设ProSeek会计算出这一点。我的答案集中在
zip
str.center
str.join
的使用上。允许pprint_表与python2/3一起工作的一个小补丁:
def pprint_表(表):colpad=[]侧边空间=3表示范围内的i(len(表[0]):colpad.append(maxwidth(表,i))对于表中的行:sys.stdout.write(str(row[0]).ljust(colpad[0]+1)),用于范围(1,len(row)):col=str(row[i]).rjust(colpad[i]+side_spaces)sys.stdout.write(str(“”+col))print(“”)
for l in ln:
    print "\t".join([str(x).ljust(10) for x in l])