2012-01-08 5 views
1

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 

2行目は288734.なぜ後には、タブを持っていませんか?

cfn79e739_1.lpと260175の後に最初の行にタブが表示されません。なぜですか?

各列を同じ位置にする必要があります。

+2

を(すべてがに整列され、あなたの出力のタブがあります第8列)。 – Howard

+0

関連しないノート:(1)これらのタブをすべて追加するPythonの方法は ''\ t'.join([c.lstrip()、d.rstrip(...)、') 'です。 (2)あなたの 'd.rstrip( '\ n')'はおそらく 'd.rstrip()'として簡略化され(もう少しパワフルに)なり、空白も取り除かれます。 – EOL

答えて

2

はいそうです。しかし、それはタブの仕組みではありません。カーソルを8の倍数の次の列に移動します。完全な表の整列が必要な場合は、文字列補間や既知のサイズの書式設定を使用する必要があります。

>>> print '%-20s %-4d' % ('foo', 42) 
foo     42 
>>> print '%-20s %-4d' % ('bar', 13) 
bar     13 
+1

downvoteはありませんが、タブは必ず「カーソルを次のカラムに8の倍数だけ移動する」とは限りません(例えば、 'less'ページャに任意の倍数にタブを置くように指示することができます)。この文章は少なくとも修飾されていなければなりません。 – EOL

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  
+0

+1:非常に良い解決策。確かに、表は元の質問に対する解決策ではありません。 – EOL

関連する問題