2017-02-04 11 views
0

私のpythonにかなり新たなんだと、この出力を持っていた何かをした: (テキストはそこそこcsvファイルである: 1、 2、B 3、Cなど)CSVデータの出力をフォーマットしますか?

Number  Letter 

1    A 
2    B 
3    C 
26   Z 

更新されたコードは、私はそれが3 Cを作るために取得するにはどうすればよい

fx = int(input('Number?\n')) 
f=open('nums.txt','r') 
lines=f.readlines() 
line = lines[fx - 1] 
with open('nums.txt','r') as f: 
    for i, line in enumerate(f): 
     if i >= 5: 
      break 
     NUM, LTR, SMB = line.rsplit(',', 1) 
     print(NUM.ljust(13) + LTR.ljust(13) + SMB) 

をrnを:残念ながら、私は手動で次のようにスペースを作っている複雑な方法を使用してそれを作る時間の良い量を費やしolumns?簡単なアライメントのために

Number  Letter 

1    A 
2    B 
3    C 
26    Z #< string moves with spaces. 
+1

使用 'format' ... –

+0

はあなたがちょうど' '{::<13} {<13}' のようなものを望んでいない、固定幅の列を探しているなら、「Z」) ' – jonrsharpe

答えて

2

、次のことができます。今のところは、そのため、このような周りの文字列を移動しません、これを達成するための簡単な方法がある

ValueError: not enough values to unpack (expected 3, got 2) 

を思い付きますljustまたはrjustを使用してください。より複雑な出力フォーマットを

with open('numberletter','r') as f: 
    for i, line in enumerate(f): 
     if i >= 5: 
      break 
     number, letter = line.rsplit(',', 1) 
     print(number.ljust(13) + letter) 

str.format()を見て、formatting syntax

+0

私は例えば3列持っていると思った場合はどう:あなたにも、'二列にljust'を適用する – Yaya

+0

番号文字記号を。または、もっと良い方法で、すべての列に 'rjust'を使用してください。右揃えだからそれだけで 'NUM、LTR、SMB = line.rsplit( ''、1)' ' プリント(NUM.ljust(13)+ LTRだろう、とにかく;-) – schwobaseggl

+0

、ほとんどのケースで良く見えます。 ljust(13)+ SMB) ' – Yaya

-1

あなたはそのためsysモジュールを使用することができますプロセスにしたい各行のファイル全体を読み込む必要もありません。 。フォーマット(26

import sys 
a=[1,"A"] 
sys.stdout.write("%-6s %-50s " % (a[0],a[1])) 
+1

の'テスト26 z'?これがなぜ機能するのかは、 'sys'と(推奨されない)文字列フォーマット演算子'% 'を持つものとは関係ありません。 L3viathan @ – L3viathan

+0

私は印刷機能は、各出力の後に新しい行を印刷し続けるので、彼はそこで、SYSを入れて、私はノー改行で出力を要求したと思います。 – Yaya

+0

@Yaya 'print(s、end = '')'少ない労力で同じことを行います – schwobaseggl

関連する問題