2017-08-04 3 views
2

編集承認された回答は正しいものの、すべてのデータがファイルに表示されますが、情報をループして新しい行に書き込むため、データはカスケードパターンで表示されます。この時点では、書式設定の問題に過ぎません。誰もが同様の問題を経験していますか?Python - CSVファイルとループに書き込む

私は複数の変数を定義しているforループを持っています。私はそれらの変数内の値を何度も何度も上書きせずにCSVに出力する必要があります。私は、この問題を解決するには、 "with open"ステートメントをforループの外側に置くことになりますが、Pythonは自分の変数を認識できなくなります。

解決策のもう1つは、変数内にデータを追加してforループの外で呼び出せるようにすることだと思いますが、私の場合はどうすればよいか分かりません。

例:それはforループ内で定義されているので、この例で

for item in my_list: 

    info = inspect.getmembers(item) 
    name = info[0] 

import csv 

with open("sample.csv", "w") as csvFile: 
    fieldnames = ['Item Name'] 
    writer = csv.DictWriter(csvFile, fieldnames=fieldnames) 

    writer.writeheader() 
    writer.writerow({'Item Name': name }) 
csvFile.close() 

、変数「名」が定義できません。

+0

'with'を使用している場合は、' csvFile.close() 'は必要ありません。また、 'name'はあなたのループで常に再定義されています。すべての' info [0] 'をリストに追加しようとしていますか?もう一つは、 'list'という変数を使うべきです。なぜなら、既に空リストを作るためにpythonで使われているからです。最後に、 'with'は' for'ループの外にあります。あなたはどのような出力を得ていますか? – jacoblaw

+0

はい、すべての情報[0]をCSVに書き込む必要があります。 「名前」を印刷してこのコードを実行すると、リスト内のすべての項目の名前がわかりますが、これをCSVに書き込むと、リスト内の最後の項目の名前しか表示されません。 –

答えて

5
import csv 
with open("sample.csv", "w") as csvFile: 
    fieldnames = ['Item Name'] 
    writer = csv.DictWriter(csvFile, fieldnames=fieldnames) 
    writer.writeheader() 

    for item in list: 
     info = inspect.getmembers(item) 
     name = info[0] 

     writer.writerow({'Item Name': name }) 
1

あなたのforループ内からファイルに値を書き込むことができるように、あなたのループの前にwithを置く:(私はまだ、コメントするのに十分な評判を持っていないので)

import csv 
with open('sample.csv', 'w') as csvFile: 
    fieldnames = ['Item Name'] 
    writer = csv.DictWriter(csvFile, fieldnames=fieldnames) 
    writer.writeheader() 

    for item in list: 
     # get the data you want from item 
     info = inspect.getmembers(item) 
     name = info[0] 

     # write the data to the file 
     writer.writerow({'Item Name': name }) 

NOTE :ステートメントで処理されるので、Rohanの答えで見つかったcsvFile.close()は必要ありません。また、PEP8ごとに、インデントには4より2スペースを使用する必要があります。

関連する問題