Python で CSV に辞書を書き込む
このチュートリアルでは、Python で辞書変数を csv ファイルに書き込む方法を紹介します。
Python で辞書を CSV ファイルに書き込むには csv
モジュールを使用する
Python モジュール csv
は csv ファイルを操作するためのツールや関数を含んでいます。辞書を csv ファイルに書き込むための簡単なメソッドが 2つあります。それは writer()
と DictWriter()
です。
これら 2つのメソッドは似たような関数を持ちますが、唯一の違いは DictWriter()
がより多くの関数を含むラッパクラスであることです。
ここでは、いくつかのキーと値のペアを持つ単一の辞書を用いて、初期の例を設定してみましょう。
dct = {"Name": "John", "Age": "23", "Country": "USA"}
最初の例では、writer()
を用いて新しい csv ファイルにアクセスして辞書を挿入します。
import csv
dct = {"Name": "John", "Age": "23", "Country": "USA"}
with open("dct.csv", "w") as f:
writer = csv.writer(f)
for k, v in dct.items():
writer.writerow([k, v])
ファイルアクセス型は w
なので、csv ファイル dct.csv
の内容は新しい変更によって上書きされます。ファイルが存在しない場合は、同じディレクトリに自動的に作成されます。
csv ファイルの内容が出力されます。
辞書エントリは 1つだけなので、csv ファイルのレイアウトでは、1 列目にすべてのキーが含まれ、2 列目に値が含まれます。
辞書の配列を使用する例
1つの辞書の例でした。1つの csv ファイルに複数の辞書を挿入したい場合はどうでしょうか。
この例では、関数 DictWriter()
を用いて csv ファイルに書き込む。同じキーを持つ値が複数存在するため、最初の例の CSV レイアウトも変更する必要があります。
最初の行にはキーラベルを格納し、それに続く行には各辞書項目の値を格納します。
まず、同じキー値を持つ辞書の配列を宣言します。
dct_arr = [
{"Name": "John", "Age": "23", "Country": "USA"},
{"Name": "Jose", "Age": "44", "Country": "Spain"},
{"Name": "Anne", "Age": "29", "Country": "UK"},
{"Name": "Lee", "Age": "35", "Country": "Japan"},
]
この辞書の配列を csv
モジュールと DictWriter()
を用いて csv ファイルに書き込む。
import csv
labels = ["Name", "Age", "Country"]
dct_arr = [
{"Name": "John", "Age": "23", "Country": "USA"},
{"Name": "Jose", "Age": "44", "Country": "Spain"},
{"Name": "Anne", "Age": "29", "Country": "UK"},
{"Name": "Lee", "Age": "35", "Country": "Japan"},
]
try:
with open("csv_dct.csv", "w") as f:
writer = csv.DictWriter(f, fieldnames=labels)
writer.writeheader()
for elem in dct_arr:
writer.writerow(elem)
except IOError:
print("I/O error")
DictWriter()
のパラメータ fieldnames
には変数 labels
が代入されます。
また、ファイルを操作するコードを例外処理(try ... except
)でラップする練習をするのも良いでしょう。これは、ファイルの書き込み処理に関連して外部エラーや非互換性が発生した場合に備えてのことです。
出力:
要約すると、csv
モジュールには辞書を csv ファイルに書き込むために必要なすべての関数とツールが含まれています。関数 writer()
と DictWriter()
を使えば簡単に実現できます。
また、何かを壊す前に IO エラーを確実にキャッチするために、ファイルを操作するブロックを例外処理でラップすることに注意すると良いでしょう。
Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.
LinkedIn関連記事 - Python CSV
- Python を使用して 2つの CSV ファイルを比較し、相違点を出力する
- PythonはCSVを複数のファイルに分割します
- 複数の CSV ファイルを Pandas にインポートし、1つの DataFrame に連結する
- Python で CSV に 1 行ずつ書き込みます
- Python で CSV を 1 行ずつ読む
- Python を使用して XML を CSV に変換する