Python標準ライブラリの csv モジュールを使用すると、CSV形式のデータを簡単にリストとして取り込むことができます。 ここでは、基本的な全行読み込みの方法と、1行目のタイトル(ヘッダー)を読み飛ばしてデータ部分だけを処理する方法を解説します。
目次
1. CSVファイルをそのまま読み込む
csv.reader オブジェクトを作成し、for 文で回すことで、1行ずつ「文字列のリスト」として取得できます。
サンプルデータ (products.csv)
ID,商品名,価格
101,Apple,120
102,Orange,80
103,Banana,150
ソースコード
import csv
# 1. ファイルを開く
# CSVを扱う際は newline="" を指定するのが推奨されています(改行コードの自動変換防止)
with open("products.csv", encoding="utf-8", newline="") as f:
# 2. Readerオブジェクトを作成
reader = csv.reader(f)
# 3. 1行ずつ読み込んで表示
print("--- 全行読み込み ---")
for row in reader:
# row は ['ID', '商品名', '価格'] のようなリストになります
print(row)
実行結果
--- 全行読み込み ---
['ID', '商品名', '価格']
['101', 'Apple', '120']
['102', 'Orange', '80']
['103', 'Banana', '150']
2. ヘッダー行を読み飛ばす方法
データ分析などでは、1行目の項目名は不要で、2行目以降のデータだけを使いたいケースが多々あります。 その場合、next() 関数を使ってイテレータを1つ進めることで、ヘッダーをスキップ(あるいは変数に退避)できます。
ソースコード
import csv
with open("products.csv", encoding="utf-8", newline="") as f:
reader = csv.reader(f)
# ヘッダー(最初の1行)を読み飛ばす
# 戻り値としてヘッダー行が返るので、必要なら変数に保存します
header = next(reader)
print(f"ヘッダー: {header}")
print("-" * 20)
print("--- データのみ処理 ---")
# 既に1行目が消費されているため、ループは2行目から始まります
for row in reader:
product_name = row[1]
price = row[2]
print(f"{product_name} は {price} 円です。")
実行結果
ヘッダー: ['ID', '商品名', '価格']
--------------------
--- データのみ処理 ---
Apple は 120 円です。
Orange は 80 円です。
Banana は 150 円です。
解説
newline="":open()関数でCSVを開く際、この引数を指定しないと、Windows環境などで改行コードの処理がうまくいかず、空行が含まれてしまうなどの問題が起きる可能性があります。next(reader):readerはイテレータ(順番にデータを取り出す仕組み)です。next()を1回呼ぶと「現在の行を取得して、読み込み位置を次の行へ進める」という動作をします。これにより、続くforループでは次の行から処理が開始されます。
