150

私は、解決できないように見える非常に簡単なタスクであるべきだと思うものを持っています。

Python 辞書を csv ファイルに書き込むにはどうすればよいですか? ファイルの一番上の行に辞書のキーを書き、2 行目にキーの値を書きたいだけです。

私が最も近いのは次のとおりです(他の人の投稿から取得しました):

f = open('mycsvfile.csv','wb')
w = csv.DictWriter(f,my_dict.keys())
w.writerows(my_dict)
f.close()

問題は、上記のコードが最初の行にキーを書き込んでいるだけのように見えることです。2 行目に値が書き込まれていません。

何か案は?

4

2 に答える 2

240

DictWriter.writerows()辞書ではなく、辞書のリストを期待するを使用しています。あなたDictWriter.writerow()は単一の行を書きたいです。

DictWriter.writeheader()csv ファイルのヘッダーが必要な場合にも使用します。

ファイルを開くためwithステートメントも参照してください。Pythonic で読みやすいだけでなく、例外が発生した場合でもクローズを処理します。

これらの変更を行った例:

import csv

my_dict = {"test": 1, "testing": 2}

with open('mycsvfile.csv', 'w') as f:  # You will need 'wb' mode in Python 2.x
    w = csv.DictWriter(f, my_dict.keys())
    w.writeheader()
    w.writerow(my_dict)

生成するもの:

test,testing
1,2
于 2012-04-29T15:15:48.150 に答える
112

あなたのコードはほとんど機能していませんでした。

DictWriterではなく、通常の csv.writer を使用してみてください。後者は主に辞書のリストを書くために使用されます。

各キーと値のペアを別々の行に書き込むコードを次に示します。

import csv

somedict = dict(raymond='red', rachel='blue', matthew='green')
with open('mycsvfile.csv','wb') as f:
    w = csv.writer(f)
    w.writerows(somedict.items())

代わりに、すべてのキーを 1 つの行に配置し、すべての値を次の行に配置する場合も簡単です。

with open('mycsvfile.csv','wb') as f:
    w = csv.writer(f)
    w.writerow(somedict.keys())
    w.writerow(somedict.values())

プロのヒント: このようなコードを開発するときは、w = csv.writer(sys.stderr)何が生成されているかをより簡単に確認できるように、ライターを に設定します。ロジックが完成したら、 に戻りw = csv.writer(f)ます。

于 2012-04-29T15:48:58.337 に答える