Python csv モジュール

CSV(Comma-Separated Values)ファイルは、表形式データを格納するための一般的なファイル形式です。

CSV ファイルはプレーンテキストで構成され、各行は表の1行のデータを表し、各列はカンマ(または他の区切り文字)で区切られます。

CSV ファイルはシンプルで扱いやすいため、データ交換によく使用されます。

Python は組み込みのcsvモジュールを提供しており、CSV ファイルの読み取りと書き込みに使用します。このモジュールは CSV ファイルの処理を簡素化し、開発者が簡単に表形式データを操作できるようにします。


1. CSV ファイルの読み取り

CSV ファイルを読み取るには、csv.readerオブジェクトを使用します。以下は簡単な例です:

実例

import csv

# CSV ファイルを開く
with open('data.csv', mode='r', encoding='utf-8') as file:
    # csv.reader オブジェクトを作成
    csv_reader = csv.reader(file)
   
    # データを1行ずつ読み取る
    for row in csv_reader:
        print(row)

コードの説明:

  • open('data.csv', mode='r', encoding='utf-8'):読み取り専用モードでdata.csvという名前のファイルを開き、エンコーディングを UTF-8 に指定します。
  • csv.reader(file):を作成しますcsv.readerオブジェクトで、ファイルの内容を読み取るために使用します。
  • for row in csv_reader:ファイルの内容を1行ずつ読み取り、各行のデータはリストとして解析されます。

2. CSV ファイルの書き込み

CSV ファイルに書き込むには、csv.writerオブジェクトを使用します。以下は例です:

実例

import csv

# 書き込むデータ
data = [
    ['Name', 'Age', 'City'],
    ['Alice', '30', 'New York'],
    ['Bob', '25', 'Los Angeles']
]

# CSV ファイルを開く
with open('output.csv', mode='w', encoding='utf-8', newline='') as file:
    # csv.writer オブジェクトを作成
    csv_writer = csv.writer(file)
   
    # データを書き込む
    for row in data:
        csv_writer.writerow(row)

コードの説明:

  • open('output.csv', mode='w', encoding='utf-8', newline=''):書き込みモードでoutput.csvという名前のファイルを開き、エンコーディングを UTF-8 に指定します。newline=''Windows システムで空行が発生するのを防ぐために使用します。
  • csv.writer(file):を作成しますcsv.writerオブジェクトで、ファイルの内容を書き込むために使用します。
  • csv_writer.writerow(row):各行のデータをファイルに書き込みます。

3. 辞書を使用した CSV ファイルの読み取りと書き込み

csvモジュールはさらにDictReaderとDictWriterクラスを提供します。これらは CSV ファイルの各行を辞書として解析したり、辞書を CSV ファイルに書き込んだりできます。

を使用してDictReaderCSV ファイルを読み取る:

実例

import csv

with open('data.csv', mode='r', encoding='utf-8') as file:
    csv_dict_reader = csv.DictReader(file)
   
    for row in csv_dict_reader:
        print(row)

を使用してDictWriterCSV ファイルに書き込む:

実例

import csv

data = [
    {'Name': 'Alice', 'Age': '30', 'City': 'New York'},
    {'Name': 'Bob', 'Age': '25', 'City': 'Los Angeles'}
]

with open('output.csv', mode='w', encoding='utf-8', newline='') as file:
    fieldnames = ['Name', 'Age', 'City']
    csv_dict_writer = csv.DictWriter(file, fieldnames=fieldnames)
   
    # ヘッダーを書き込む
    csv_dict_writer.writeheader()
   
    # データを書き込む
    for row in data:
        csv_dict_writer.writerow(row)

よく使われる属性とメソッド

csv モジュールのコアメソッド

メソッド説明例
csv.reader()ファイルオブジェクトから CSV データを読み取るreader = csv.reader(file)
csv.writer()データを CSV ファイルに書き込むwriter = csv.writer(file)
csv.DictReader()CSV 行を辞書として読み取る(ヘッダー付き)dict_reader = csv.DictReader(file)
csv.DictWriter()辞書を CSV ファイルに書き込む(フィールド名の指定が必要)dict_writer = csv.DictWriter(file, fieldnames)
csv.register_dialect()カスタム CSV 形式を登録する(例:区切り文字)csv.register_dialect('mydialect', delimiter='|')
csv.unregister_dialect()登録済みの方言を削除するcsv.unregister_dialect('mydialect')
csv.list_dialects()登録済みのすべての方言を一覧表示するprint(csv.list_dialects())

csv.reader と csv.writer オブジェクトのよく使われるメソッド

メソッド説明適用オブジェクト
__next__()次の行を反復的に読み取る(またはforループを使用)reader
writerow(row)単一行のデータを書き込むwriter
writerows(rows)複数行のデータを書き込む(リストのリスト)writer

csv.DictReader と csv.DictWriter オブジェクトの特性

特性/メソッド説明例
fieldnamesフィールド名のリスト(DictReader最初の行から自動的に取得)dict_reader.fieldnames
writeheader()ヘッダー行を書き込む(DictWriter専用)dict_writer.writeheader()

よく使われるパラメータの説明

パラメータ説明例の値適用メソッド
delimiterフィールド区切り文字','(デフォルト),'\t'reader/writer
quotechar引用文字(特殊なフィールドを囲む)'"'(デフォルト)reader/writer
quoting引用ルールcsv.QUOTE_ALL(すべて引用)reader/writer
skipinitialspace区切り文字の後の空白を無視するTrue/Falsereader
lineterminator行末記号'\r\n'(デフォルト)writer
dialect定義済みの方言名'excel'(デフォルト)すべてのメソッド

実例

1. CSV ファイルの読み取り

実例

import csv

with open('data.csv', 'r') as file:
    reader = csv.reader(file, delimiter=',')
    for row in reader:
        print(row)  # 各行はリストです

2. CSV ファイルの書き込み

実例

data = [['Name', 'Age'], ['Alice', 25], ['Bob', 30]]

with open('output.csv', 'w', newline='') as file:
    writer = csv.writer(file)
    writer.writerows(data)  # 複数行を書き込む

3. DictReader と DictWriter を使用する(ヘッダー付き)

実例

# 読み取り
with open('data.csv', 'r') as file:
    dict_reader = csv.DictReader(file)
    for row in dict_reader:
        print(row['Name'], row['Age'])  # フィールド名でアクセス

# 書き込み
fieldnames = ['Name', 'Age']
with open('output.csv', 'w', newline='') as file:
    dict_writer = csv.DictWriter(file, fieldnames=fieldnames)
    dict_writer.writeheader()  # ヘッダーを書き込む
    dict_writer.writerow({'Name': 'Alice', 'Age': 25})

4. カスタム方言(TSV ファイルの処理など)

実例

csv.register_dialect('tsv', delimiter='\t', quoting=csv.QUOTE_NONE)

with open('data.tsv', 'r') as file:
    reader = csv.reader(file, dialect='tsv')
    for row in reader:
        print(row)
その他の拡張