2013-07-01 23 views
6

CSVファイルにdictsのリストを書き込もうとすると、以前のSOの質問which can be found hereに非常に有益な答えがありました。私が使用したコードは次のとおりです。理解csv PythonのDictWriter構文

with open((filename), 'wb') as outfile: 
    write = csv.DictWriter(outfile, keyList) 
    write.writer.writerow(keyList) 
    write.writerows(data) 

ここで、keyListはcsvファイルのヘッダーのリストです。

コードは素晴らしく、うまくいきましたが、なぜ私が根底にあるwriterインスタンスを呼び出してkeyList(ヘッダ)を書く必要があるのか​​理解できません。私はwrite.writerow(keyList)としてその行を試しても機能しませんでした。私はそれがなぜPythonのDictWriterがどのように動作するのかをよりよく理解できる理由が不思議です。

これを書くにはクリーナー/ニースの方法がありますか?

+0

を呼び出すことですか? – Blender

+0

@Blender: 'AttributeError: 'list'オブジェクトに属性 'get''がありません –

+0

' AttributeError:' list 'オブジェクトに属性' get''がありません – user139014

答えて

3

あなたは文書化されていない動作に依存しているようです。 DictWriterオブジェクトには、公式のwriterメソッドがありません。

correct way to output the CSV headers

は `write.writerow(キーリスト)`どのようなエラーをスローしない

write.writeheader() 
+0

これは意味がありますが、writeheader関数のヘッダをどのように指定すればよいですか? keyListをコード 'write.writeheader(keyList)'に渡そうとすると、TypeErrorがスローされました:writeheader()はちょうど1つの引数(2が与えられました) ' – user139014

+1

@ kg41:あなたは - 'DictWriter'オブジェクトを構築します。 '.writeheader()'はパラメータなしで呼び出されます(単一の引数は暗黙の 'self'です)。 –

+0

私を無視して、私はばかだ。単に引数なしで 'writeheader()'と呼ばれ、うまくいきました。ありがとう@ティム。 – user139014