如何在Python中向文件输出插入制表符?
我该如何在Python中将制表符插入到文件输出中呢?
比如,
print >>outPutFile , c.lstrip()+"\t"+d.rstrip('\n')+"\t"+a+"\t"+b
输出结果:
cfn79e739_1.lp 260175 79 739
cfn100e1217_1.lp 288734 100 1217
第二行在288734后面没有制表符,为什么呢?
第一行在cfn79e739_1.lp和260175后面也没有制表符,为什么?
我需要让每一列对齐。
2 个回答
2
是的,确实如此。但是这不是制表符的工作方式。制表符会把光标移动到下一个八的倍数的列。如果你想要完美的对齐效果,最好使用字符串插值或者格式化,确保每个部分的大小是已知的。
>>> print '%-20s %-4d' % ('foo', 42)
foo 42
>>> print '%-20s %-4d' % ('bar', 13)
bar 13
3
计算每一列的最大宽度,然后根据这个宽度给每个值添加适当的空格:
lines = [
['cfn79e739_1.lp', '260175', '79', '739'],
['cfn100e1217_1.lp', '285768', '100', '1217'],
['cfn200e11660_1.lp', '288734', '200', '11660'],
['cfn1500e145_1.lp', '218435', '1500', '145'],
]
def print_columns(lines, spacing=2):
widths = [max(len(value) for value in column) + spacing
for column in zip(*lines)]
for line in lines:
print(''.join('%-*s' % item for item in zip(widths, line)))
print_columns(lines)
输出结果:
cfn79e739_1.lp 260175 79 739
cfn100e1217_1.lp 285768 100 1217
cfn200e11660_1.lp 288734 200 11660
cfn1500e145_1.lp 218435 1500 145