使用Python的漂亮打印机?
我有一个标签列表,数据如下 ['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 |速度|高| +----+---------+-----------+------------+----------+-----------+--------------+ 谢谢你的帮助。类似这样的内容:使用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'] 这就是结果 +----+---------+-----------+------------+----------+-----------+--------------+
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])