PythonでCSVファイルの読み込み・書き込みを行う方法

CSVファイルを読み書きするには、csvモジュールのcsv.readerとcsv.writerを使用します。

CSVファイルの読み込み

まず、open()でファイルをオープンします。

file = open('サンプル.csv')

次に、readerオブジェクトを作成します。

reader = csv.reader(file)

そして、for文やnextなどを使ってreaderオブジェクトから1行ごとに取得します。

for row in reader:
  # 何かの処理

この場合、rowはカンマで区切られたリストが格納されています。

ファイル読み込みのサンプル

ファイルを読み込むときはopen()を読み込みモードで指定してファイルを開きます。

ここではwith構文を使うことで、オープンしたファイルのクローズを省略しています。特に理由がない場合は、with構文を使用した方が安全にファイルを扱うことができます。

# -*- coding: utf-8 -*-

import csv

# ファイルを読み込みモードでオープン
with open('sample.csv', 'r') as f:

  reader = csv.reader(f) # readerオブジェクトを作成
  header = next(reader)  # 最初の一行をヘッダーとして取得

  print ''.join(header)  # ヘッダーをスペース区切りで表示
  
  # 行ごとのリストを処理する
  for row in reader:
    print ''.join(row)   # 1行ずつスペース区切りで表示

next文を使うことでヘッダーなど特定の行の処理を分けることができます。

NAME,AGE,JOB
Mike,21,Designer
Tom,24,Engineer
Anna,31,Doctor

例えば上のCSVファイル(sample.csv)を読み込むと、以下のような実行結果になります。

NAME AGE JOB
Mike 21 Designer
Tom 24 Engineer
Anna 31 Doctor

CSVファイルの書き込み

まず、writerオブジェクトを作成します。

writer = csv.writer(ファイルオブジェクト)

そして、writerowやwriterowsを使って書き込みます。1行だけ書き込むときにはwriterow、複数行を書き込むときにはwriterowsを使用すると良いでしょう。

writer.writerow(書き込む配列)
writer.writerows(書き込む配列の配列)

書き込みのサンプル

下の例では1行目のヘッダーをwriterow関数を使って書き込み、2行目以降をwriterows関数を使って書き込んでいます。

# -*- coding: utf-8 -*-

import csv

# ヘッダー
header = ['ID', 'name']

# 内容
body = [
  [0, 'Alex'],
  [1, 'John'],
  [2, 'Bob']
]

# ファイルを書き込みモードでオープン
with open('sample.csv', 'w') as f:

  writer = csv.writer(f)  # writerオブジェクトを作成
  writer.writerow(header) # ヘッダーを書き込む
  writer.writerows(body)  # 内容を書き込む

上のプログラムを実行すると以下のようなファイル(sample.csv)が作成されます。

ID,name
0,Alex
1,John
2,Bob

イベント