如何在Python中向文件输出插入制表符?

1 投票
2 回答
6785 浏览
提问于 2025-04-17 09:48

我该如何在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    

撰写回答