[解決済み] csv.DictWriterでヘッダー行を書き込むには?
2022-08-03 07:05:48
質問
私が
csv.DictReader
オブジェクトがあり、それをCSVファイルとして書き出したいとします。どうすればよいのでしょうか?
を書き出すことができるのは知っています。 行のデータ というように
dr = csv.DictReader(open(f), delimiter='\t')
# process my dr object
# ...
# write out object
output = csv.DictWriter(open(f2, 'w'), delimiter='\t')
for item in dr:
output.writerow(item)
しかし、どのようにフィールド名を含めることができますか?
どのように解決するのですか?
編集してください。
2.7 / 3.2には
という新しい
writeheader()
メソッド
. また、John Machin氏の回答では、よりシンプルな方法でヘッダー行を記述しています。
を使った簡単な例
writeheader()
メソッドを使用する簡単な例です。
from collections import OrderedDict
ordered_fieldnames = OrderedDict([('field1',None),('field2',None)])
with open(outfile,'wb') as fou:
dw = csv.DictWriter(fou, delimiter='\t', fieldnames=ordered_fieldnames)
dw.writeheader()
# continue on to write data
DictWriterのインスタンス化にはfieldnamesの引数が必要です。
から
ドキュメント
:
fieldnamesパラメータは の値の順序を指定します。 メソッドに渡されるディクショナリの値の順序を指定します。 メソッドに渡された辞書の値が csv ファイルに書き込まれる順番を指定します。
別の言い方をすると Pythonのdictsは本質的に順序付けされないので、Fieldnamesの引数は必要です。
以下は、ヘッダーとデータをファイルに書き出す例です。
注
with
文は2.6で追加されました。2.5を使用している場合。
from __future__ import with_statement
with open(infile,'rb') as fin:
dr = csv.DictReader(fin, delimiter='\t')
# dr.fieldnames contains values from first row of `f`.
with open(outfile,'wb') as fou:
dw = csv.DictWriter(fou, delimiter='\t', fieldnames=dr.fieldnames)
headers = {}
for n in dw.fieldnames:
headers[n] = n
dw.writerow(headers)
for row in dr:
dw.writerow(row)
コメントで@FMさんが触れているように、ヘッダーライティングをワンライナーに凝縮することもできます、例えば。
with open(outfile,'wb') as fou:
dw = csv.DictWriter(fou, delimiter='\t', fieldnames=dr.fieldnames)
dw.writerow(dict((fn,fn) for fn in dr.fieldnames))
for row in dr:
dw.writerow(row)
関連
-
[解決済み] 複数の例外を1行でキャッチする(ブロックを除く)
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] インスタンスのクラス名を取得する?
-
[解決済み] 最近のPythonでカスタム例外を宣言する適切な方法?
-
[解決済み] JSONファイルをprettyprintする方法は?
-
[解決済み] JSONデータをファイルに書き込むにはどうしたらいいですか?
-
[解決済み] 既存のDataFrameに新しい列を追加する方法は?
-
[解決済み] pandasのDataFrameをCSVファイルに書き出す
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
-
[解決済み] Celeryタスクのユニットテストはどのように行うのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】この辞書のリストをcsvファイルに変換するにはどうしたらいいですか?
-
[解決済み] Pythonの構文に新しいステートメントを追加することはできますか?
-
[解決済み] Pythonのargparseを使った隠し引数の作成
-
[解決済み] データフレームをソートした後にインデックスを更新する
-
[解決済み] オブジェクトのリストに特定の属性値を持つオブジェクトが含まれているかどうかをチェックする
-
[解決済み] サブフォルダからのインポートモジュール
-
[解決済み] Flaskで非同期タスクを作る
-
[解決済み] virtualenv の `--no-site-packages` オプションを元に戻す。
-
[解決済み] Pandasのデータフレーム内の文字列を'date'データ型に変換するにはどうしたらいいですか?
-
[解決済み] Pythonの文字列書式をリストで使う