Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

Python辞典

  1. トップページ
  2. Python辞典
  3. csv.reader() / csv.writer()

csv.reader() / csv.writer()

CSVファイルの読み書きを行う『csv』モジュールの関数です。スプレッドシートや表形式のデータを処理するときに使います。

構文
import csv

# CSVファイルを読み込みます。
with open('data.csv', 'r', encoding='utf-8', newline='') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)  # 各行がリストとして取得できます。

# CSVファイルに書き込みます。
with open('output.csv', 'w', encoding='utf-8', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['名前', '年齢', '都市'])
    writer.writerows([['田中', 30, '東京'], ['佐藤', 25, '大阪']])
関数一覧
関数概要
csv.reader(f)CSVファイルオブジェクトを受け取り、各行をリストとして返すイテレータを生成します。
csv.writer(f)CSVファイルオブジェクトを受け取り、CSVに書き込むためのライターオブジェクトを返します。
writer.writerow(行)1行分のリストをCSV形式でファイルに書き込みます。
writer.writerows(行リスト)複数行のリスト(リストのリスト)をまとめて書き込みます。
csv.DictReader(f)1行目をヘッダー行として読み取り、各行を辞書として返すイテレータを生成します。
csv.DictWriter(f, fieldnames)辞書形式でCSVに書き込むためのライターオブジェクトを返します。
writer.writeheader()DictWriterでヘッダー行(フィールド名)を書き込みます。
サンプルコード
import csv

# csv.writer() でCSVファイルを作成します。
rows = [
    ['名前', '年齢', '都市'],
    ['田中太郎', 30, '東京'],
    ['佐藤花子', 25, '大阪'],
    ['鈴木一郎', 35, '名古屋'],
]
with open('users.csv', 'w', encoding='utf-8', newline='') as f:
    writer = csv.writer(f)
    writer.writerows(rows)

# csv.reader() でCSVファイルを読み込みます。
with open('users.csv', 'r', encoding='utf-8', newline='') as f:
    reader = csv.reader(f)
    header = next(reader)  # ヘッダー行を取得します。
    print(f'ヘッダー: {header}')
    for row in reader:
        print(row)  # 各行がリストとして出力されます。

# DictWriter で辞書形式で書き込みます。
users = [
    {'name': '山田', 'age': 28, 'city': '福岡'},
    {'name': '高橋', 'age': 42, 'city': '札幌'},
]
with open('users2.csv', 'w', encoding='utf-8', newline='') as f:
    writer = csv.DictWriter(f, fieldnames=['name', 'age', 'city'])
    writer.writeheader()
    writer.writerows(users)

# DictReader で辞書形式で読み込みます。
with open('users2.csv', 'r', encoding='utf-8', newline='') as f:
    reader = csv.DictReader(f)
    for row in reader:
        print(f"{row['name']}さん、{row['city']}在住")
# 『山田さん、福岡在住』などと出力されます。

# タブ区切り(TSV)ファイルに書き込む場合はdelimiterを指定します。
with open('data.tsv', 'w', encoding='utf-8', newline='') as f:
    writer = csv.writer(f, delimiter='\t')
    writer.writerow(['A', 'B', 'C'])
概要

CSVファイルを開く際は『newline=""』を指定することが重要です。これを省略すると改行コードの扱いが環境によって変わり、Windowsで二重改行が入るなどの問題が発生します。

『csv.DictReader』を使うとヘッダー行をキーとした辞書で各行にアクセスできるため、列の順序を意識せずにデータを扱えます。大量のデータを処理する場合でもイテレータ形式のためメモリ効率が良いです。

Windowsで作成されたCSVファイルは文字コードが Shift-JIS(cp932)になっていることがあります。『encoding="utf-8"』で読み込むと文字化けするため、ファイルのエンコードに合わせて指定してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。