| title | Python CSV モジュール - Python チートシート |
|---|---|
| description | Python の csv モジュールを使えば、CSV ファイルを簡単に操作できます。 |
csv モジュールは、データ交換で一般的に使用される CSV ファイルの読み書きのためのツールを提供します。
open() など)を使用して CSV ファイルを読み書きすることは可能ですが、csv モジュールは、引用符付きフィールド、埋め込みデリミタ、異なる改行コードなどのエッジケースを処理するように設計されています。これにより、他のプログラム(Excel など)によって生成された CSV ファイルとの互換性が確保され、解析エラーのリスクが軽減されます。ほとんどの CSV タスクでは、手動解析よりも csv モジュールを使用することを推奨します。
ファイル操作の基本については、ファイルとディレクトリのパス ページを参照してください。
始めるには、モジュールをインポートします。
import csvこの関数は、文字列のイテラブルであるファイルを受け取ります。つまり、開いたファイルがそれに該当する必要があります。
import csv
file_path = 'file.csv'
# CSV ファイルを読み込む
with open(file_path, 'r', newline='') as csvfile:
reader = csv.reader(csvfile)
# 各行を反復処理する
for line in reader:
print(line)この関数はリーダーオブジェクトを返し、それを簡単に反復処理することで各行を取得できます。対応する行の各列には、組み込み関数 split() を使用する必要なく、インデックスでアクセスできます。
この関数は、CSV ファイルとして書き込むファイルを受け取ります。リーダー関数と同様に、次のように呼び出す必要があります。
import csv
file_path = 'file.csv'
# CSV 書き込み用にファイルを開く
with open(file_path, 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
# 何かを行う「何かを行う」ブロックは、次の関数を使用して置き換えることができます。
単一行を CSV ファイルに書き込みます。
# ヘッダー行を書き込む
writer.writerow(['name', 'age', 'city'])
# データ行を書き込む
writer.writerow(['Alice', 30, 'London'])複数の行を一度に書き込みます。
# 複数の行を準備する
rows = [
['name', 'age', 'city'],
['Bob', 25, 'Paris'],
['Carol', 28, 'Berlin']
]
# すべての行を一度に書き込む
writer.writerows(rows)CSV ファイルを読み込み、ファイルの最初の行をキー(列ヘッダー)として使用して、各行を辞書としてアクセスできるようにします。
import csv
# CSV を辞書として読み込む(最初の行がキーになる)
with open('people.csv', 'r', newline='') as csvfile:
reader = csv.DictReader(csvfile)
# インデックスではなく名前で列にアクセスする
for row in reader:
print(row['name'], row['age'])-
各
rowはOrderedDict(Python 3.8 以降では通常のdict)です。 -
CSV にヘッダーがない場合は、
fieldnamesパラメータで指定できます。reader = csv.DictReader(csvfile, fieldnames=['name', 'age', 'city'])
辞書を CSV ファイルの行として書き込むことができます。ライターを作成する際に、フィールド名(列ヘッダー)を指定する必要があります。
import csv
fieldnames = ['name', 'age', 'city']
rows = [
{'name': 'Alice', 'age': 30, 'city': 'London'},
{'name': 'Bob', 'age': 25, 'city': 'Paris'}
]
# 辞書を CSV に書き込む
with open('people_dict.csv', 'w', newline='') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader() # ヘッダー行を書き込む
writer.writerows(rows)writer.writeheader()を使用して、列ヘッダーを最初の行として書き込みます。writer.writerows()の各辞書は、ライター作成時に指定されたfieldnamesと一致するキーを持つ必要があります。
フィールドを区切るために使用される文字を指定します。ファイルタイプが示すように、デフォルトはコンマ , です。ロケールによっては、Excel がセミコロンをデリミタとして CSV ファイルを生成することがあります。
import csv
# セミコロンデリミタで CSV を読み込む
with open('data_semicolon.csv', newline='') as csvfile:
reader = csv.reader(csvfile, delimiter=';')
for row in reader:
print(row)行を終了するために使用される文字または文字シーケンス。最も一般的なのは "\r\n" ですが、"\n" の場合もあります。
特殊文字を含むフィールドを引用符で囲むために使用される文字(デフォルトは " です)。
# 引用符として一重引用符を使用する
reader = csv.reader(csvfile, quotechar="'")詳細については、公式 Python csv モジュールのドキュメントを参照してください。