言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

Python辞典

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

csv.reader() / csv.writer()

対応: Python 2(2000)

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([['岡部', 18, '東京'], ['五条', 28, '大阪']])

関数一覧

関数概要
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でヘッダー行(フィールド名)を書き込みます。

サンプルコード

sample_csv_reader_writer.py
import csv

# csv.writer() でCSVファイルを作成します。
rows = [
    ['名前', '年齢', '所属'],
    ['綾波レイ', 14, 'NERV'],
    ['碇シンジ', 14, 'NERV'],
    ['惣流アスカ', 14, 'NERV'],
]
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': 14, 'org': 'NERV', 'email': 'rei@example.com'},
    {'name': '碇シンジ', 'age': 14, 'org': 'NERV', 'email': 'shinji@example.com'},
]
with open('users2.csv', 'w', encoding='utf-8', newline='') as f:
    writer = csv.DictWriter(f, fieldnames=['name', 'age', 'org', 'email'])
    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['org']}所属、メール: {row['email']}")
# 『綾波レイさん、NERV所属、メール: rei@example.com』などと出力されます。

# タブ区切り(TSV)ファイルに書き込む場合はdelimiterを指定します。
with open('data.tsv', 'w', encoding='utf-8', newline='') as f:
    writer = csv.writer(f, delimiter='\t')
    writer.writerow(['A', 'B', 'C'])
python3 csv_reader_writer.py
ヘッダー: ['名前', '年齢', '所属']
['綾波レイ', '14', 'NERV']
['碇シンジ', '14', 'NERV']
['惣流アスカ', '14', 'NERV']
綾波レイさん、NERV所属、メール: rei@example.com
碇シンジさん、NERV所属、メール: shinji@example.com

概要

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

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

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

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