PYTHON MEBY

PythonでCSVファイルを読み書き(csv)

この記事ではPythonでCSVファイルを読み書きする方法を解説します。csvモジュールを用いた基本的な操作から、より高度な処理まで網羅します。

目次

csvモジュールのインポート

csvモジュールをインポートして使用開始します。

import csv

CSVファイルの読み込み

csv.readerオブジェクトを使ってCSVファイルを読み込みます。

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

readerオブジェクトの使い方

readerオブジェクトはイテレータとして動作し、各行をリストとして返します。

with open('data.csv', 'r', encoding='utf-8') as file:
    reader = csv.reader(file, delimiter=',', quotechar='"')
    for row in reader:
        print(row)
        # 各要素へのアクセス
        for item in row:
            print(item)

CSVファイルへの書き込み

csv.writerオブジェクトを使ってCSVファイルに書き込みます。

with open('output.csv', 'w', newline='', encoding='utf-8') as file:
    writer = csv.writer(file)
    writer.writerow(['名前', '年齢', '国籍'])
    writer.writerow(['山田太郎', '30', '日本'])
    writer.writerow(['田中花子', '25', 'アメリカ'])

writerオブジェクトの使い方

writerオブジェクトはwriterowメソッドで一行ずつ書き込みます。

with open('output.csv', 'w', newline='', encoding='utf-8') as file:
    writer = csv.writer(file)
    data = [['名前', '年齢', '国籍'], ['山田太郎', '30', '日本'], ['田中花子', '25', 'アメリカ']]
    writer.writerows(data)

ヘッダー行の処理

ヘッダー行を処理し、辞書として扱う方法

with open('data.csv', 'r', encoding='utf-8') as file:
    reader = csv.DictReader(file)
    for row in reader:
        print(row['名前'], row['年齢'])

エラーハンドリング

ファイルが存在しない場合などのエラー処理

import csv
try:
    with open('data.csv', 'r', encoding='utf-8') as file:
        reader = csv.reader(file)
        # 処理
except FileNotFoundError:
    print('ファイルが見つかりません')
except Exception as e:
    print(f'エラーが発生しました: {e}')

エンコーディングの指定

ファイルのエンコーディングを指定します。utf-8を推奨

with open('data.csv', 'r', encoding='utf-8') as file:
    reader = csv.reader(file)

サンプルコード

簡単なサンプルコード

import csv

# データを準備
data = [['Name', 'Age', 'Country'], ['Alice', '25', 'USA'], ['Bob', '30', 'UK']]

# CSVファイルに書き込む
with open('sample.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    writer.writerows(data)

# CSVファイルを読み込む
with open('sample.csv', 'r', encoding='utf-8') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

関連記事