2016-05-21 4 views
2

私は出力として以下のようなリストを与えるスクリプトを書いています。ヘッダ付きのPythonでcsvにリストアップする

['red', '361', '0'] 
['blue', '1', '0'] 
['orange', '77', '0'] 
['cream', '660', '73'] 
['ivory', '159', '0'] 

このリストは非常に巨大であり、私は以下のように上部のヘッダーにCSVに出力内容を書きたいです。ここで

color | total | fail 

は私が

with open('colour.csv', 'wb') as csvfile: 
    header = ['color', 'total', 'fail'] 
    writer = csv.writer(csvfile, delimiter=',') 
    writer.writerow(header) 
    for row in output: 
     writer.writerow(output) 

それを達成しようとしている方法です。しかし、予想通り、私は取得しています出力ではありません。 csvが生成され、リストの最後の行がcsvに3回印刷されます。私はなぜ他のすべての行が印刷されないのか、最後の行が3度印刷されるのをなぜ知ることができませんか?ここ は、私が取得していますサンプル出力です:

color | total | fail 
ivory | 159 | 0 
ivory | 159 | 0 
ivory | 159 | 0 

これは私が出力する期待していものです:

color | total | fail 
red | 361 | 0 
blue | 1 | 0 
orange | 77 | 0 
cream | 660 | 73 
ivory | 159 | 0 

誰もこれで私を助けてくださいことはできますか?

+3

はそれは 'writer.writerow(行)'ではないでしょうか? –

+0

'出力の行:writer.writerow(output)'が奇妙に見えますが、現在は出力が未定義です。 – Pythonista

+1

「出力」はどこから来たのですか?それはかなり重要だと思われる。それはすべての行ではなく、最後の行であるようです。 –

答えて

5

コード -

import csv 

arr = [['red', '361', '0'], 
     ['blue', '1', '0'], 
     ['orange', '77', '0'], 
     ['cream', '660', '73'], 
     ['ivory', '159', '0']] 

with open('output.csv','w') as f: 
    writer = csv.writer(f) 
    writer.writerow(['color', 'total', 'fail']) 
    writer.writerows(arr) 
+0

私は前にこのアプローチを試して、出力が生成される方法が私が望むものと異なっています。リスト内の単語の文字は、以下のようにcsvの個々の列に出力されます。 'r | e | d | ' ' 3 | 6 | 1' – csvb

+0

@csvbこのコードを試しましたか?あなたが得た結果は 'writer.writerows'の代わりに' writer.writerow'を使うことでした。 –

+1

@csvb - この解決法は正しいですが、改行を避けるためにlineterminator = '\ n'をcsv.writer()に渡すことは良い考えです。面白い結果が出てきたら、先ほどお話したように、CSVリーダーでカスタム設定を使用している可能性があります。あなたがカスタムフォーマットを探しているなら、デリミタとquotecharのパラメータを試してみてください。 – Boa

関連する問題