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)
# 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)
# 書き込むデータ
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)
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)
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/False | reader |
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) # 各行はリストです
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) # 複数行を書き込む
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})
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)
with open('data.tsv', 'r') as file:
reader = csv.reader(file, dialect='tsv')
for row in reader:
print(row)