カテゴリ: Python 更新日: 2026/07/07

PythonでCSVファイルを扱う方法!csvモジュールの基本と活用例

PythonでCSVファイルを扱う方法!csvモジュールの基本と活用例
PythonでCSVファイルを扱う方法!csvモジュールの基本と活用例

先生と生徒の会話形式で理解しよう

生徒

「Pythonで表みたいなデータを扱うとき、どうすればいいですか?」

先生

「そういう場合はCSVファイルを使うのがおすすめです。そしてPythonにはcsvモジュールが用意されているので簡単に扱えますよ。」

生徒

「CSVって何ですか?」

先生

「CSVは『Comma Separated Values』の略で、カンマで区切られたデータです。表計算ソフトでも開けます。今日はその読み書き方法を学びましょう。」

1. CSVファイルとは?初心者にも分かりやすく解説

1. CSVファイルとは?初心者にも分かりやすく解説
1. CSVファイルとは?初心者にも分かりやすく解説

CSV(シーエスブイ)ファイルとは、「Comma Separated Values」の略で、日本語では「カンマで区切られた値」という意味です。その名の通り、データをカンマ(,)で区切って保存する、非常にシンプルで汎用性の高いファイル形式です。

プログラミングの世界だけでなく、ExcelやGoogleスプレッドシートなどの表計算ソフト、データベースのバックアップ、顧客管理システム間のデータ移行など、あらゆる場面で「標準的なデータ形式」として利用されています。

ここがポイント!
  • 互換性が高い:WindowsやMac、スマホなど環境を問わず開けます。
  • 軽量:余計な装飾情報がないため、ファイルサイズが小さく処理が速いです。
  • 中身はテキスト:メモ帳などのテキストエディタで中身を直接確認・編集できます。

例えば、名前、年齢、居住地という3つの情報を持つデータがある場合、CSV形式では以下のように記述されます。


名前,年齢,国
太郎,25,日本
花子,30,アメリカ

このように、1行が「1人分のデータ(レコード)」を表し、各項目をカンマで区切ることで、コンピュータが「どこからどこまでが名前で、どこが年齢か」を正確に判別できるようになっています。

2. csvモジュールの基本

2. csvモジュールの基本
2. csvモジュールの基本

Pythonのcsvモジュールを使うと、CSVファイルの読み書きが簡単にできます。まずは読み込みの基本を見てみましょう。



import csv



with open("sample.csv", "r", encoding="utf-8") as f:

    reader = csv.reader(f)

    for row in reader:

        print(row)



['名前', '年齢', '国']

['太郎', '25', '日本']

['花子', '30', 'アメリカ']

readerオブジェクトは、各行をリストとして返します。

3. CSVファイルへの書き込み(新規作成と保存)

3. CSVファイルへの書き込み(新規作成と保存)
3. CSVファイルへの書き込み(新規作成と保存)

リスト形式のデータをCSVファイルとして保存する方法を解説します。Python標準のcsvモジュールに含まれるcsv.writer()を使用すると、プログラミング初心者の方でも驚くほど簡単にデータを書き出すことが可能です。

ポイント:CSV書き出しは、Webスクレイピングの結果保存や、Excelで開ける名簿データの作成など、実務で非常に多用されるテクニックです。


import csv

# 書き込みたいデータ(リストの中にリストを入れた「2次元配列」形式)
data = [
    ["名前", "年齢", "国"],
    ["太郎", 25, "日本"],
    ["花子", 30, "アメリカ"],
    ["佐藤", 22, "イギリス"]
]

# ファイルを書き込みモード("w")で開く
with open("output.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    # 複数行を一度に書き込む
    writer.writerows(data)

print("CSVファイルへの書き込みが完了しました。")

コードの解説と注意点

初心者の方が特につまずきやすいポイントが、open()関数の引数です。newline=""を指定しないと、Windows環境などでは1行ごとに空行(空白の行)が入ってしまう現象が起きますが、これを記述することで綺麗なCSVが出力されます。

また、encoding="utf-8"は文字化けを防ぐための設定です。もし作成したCSVをExcelで直接開いて文字化けする場合は、ここをencoding="utf-8-sig"に変更すると、Excelが文字コードを正しく認識できるようになります。

4. PythonでCSVを辞書形式(DictReader/DictWriter)で読み書きする方法

4. PythonでCSVを辞書形式(DictReader/DictWriter)で読み書きする方法
4. PythonでCSVを辞書形式(DictReader/DictWriter)で読み書きする方法

CSV操作をより直感的に行うには、DictReaderDictWriterが非常に便利です。通常の読み込みでは「1番目の列、2番目の列…」と番号で指定しますが、辞書形式を使えば「名前」や「年齢」といったヘッダー(列名)をキーとしてデータを扱えます。

プログラミング未経験の方でも、データの意味がひと目でわかるため、コードの書き間違いを防ぐことができます。

辞書形式での読み込み例(DictReader)

まずは、CSVの1行目をラベルとして読み込み、特定の項目だけを表示させる方法を見てみましょう。


import csv

# sample.csvの中身が「名前,年齢」という見出しである前提です
with open("sample.csv", "r", encoding="utf-8") as f:
    # 辞書形式で読み込むための準備
    reader = csv.DictReader(f)
    
    for row in reader:
        # row["列名"] でデータを取り出せるので分かりやすい!
        print(f"名前は{row['名前']}さん、年齢は{row['年齢']}歳です。")

名前は太郎さん、年齢は25歳です。
名前は花子さん、年齢は30歳です。

辞書形式での書き込み例(DictWriter)

書き込みの際もDictWriterを使えば、どの列にどのデータを入れるかを明確に指定できます。writeheader()を呼び出すことで、1行目に自動で列名を作成してくれるのも大きなメリットです。


import csv

# 書き込むデータのリスト(辞書の集まり)
data = [
    {"名前": "佐藤", "年齢": "22"},
    {"名前": "鈴木", "年齢": "35"}
]

with open("output.csv", "w", encoding="utf-8", newline="") as f:
    # 最初に列の名前(ヘッダー)を定義します
    fieldnames = ["名前", "年齢"]
    writer = csv.DictWriter(f, fieldnames=fieldnames)

    # 1行目にヘッダーを書き込む
    writer.writeheader()
    # データをまとめて書き込む
    writer.writerows(data)

このように、辞書形式を活用することで「何番目の列だったかな?」と迷う必要がなくなり、効率的なデータ処理が可能になります。

5. CSVファイルを活用する実用的な具体例

5. CSVファイルを活用する実用的な具体例
5. CSVファイルを活用する実用的な具体例

CSVファイルは、単にデータを保存するだけでなく、必要な情報だけを効率的に取り出す「データ抽出」の場面で真価を発揮します。例えば、顧客リストや売上データの中から「特定の条件に一致するデータだけ」を別ファイルに保存して、分析や報告書作成に活用するケースが非常に多いです。

ここでは、プログラミング未経験の方でも理解しやすいように、「名簿データから30歳以上の人だけを抽出して、新しいファイルを作成する」というPythonのサンプルコードをご紹介します。


import csv

# 1. 元のファイルを読み込み、保存用のファイルを新しく作ります
with open("sample.csv", "r", encoding="utf-8") as f, \
     open("filtered.csv", "w", newline="", encoding="utf-8") as out:
    
    # CSVの中身を辞書形式(列の名前で扱える状態)で読み込みます
    reader = csv.DictReader(f)
    
    # 書き込み用の設定を行い、一番上の見出し行を書き込みます
    writer = csv.DictWriter(out, fieldnames=reader.fieldnames)
    writer.writeheader()
    
    # 2. データを1行ずつチェックして、条件に合うものだけを選別します
    for row in reader:
        # 「年齢」の項目が30以上の数字だった場合のみ、新しいファイルに書き出します
        if int(row["年齢"]) >= 30:
            writer.writerow(row)

このプログラムのポイントは、コンピュータに「1行ずつ中身を確認させている」点です。大量のデータが入ったCSVファイルであっても、この数行のコードを実行するだけで、手作業では時間がかかる「フィルタリング作業」を一瞬で終わらせることができます。プログラミングを活用することで、人為的なミスを防ぎつつ、業務の自動化や効率化が実現可能になります。

6. プログラミング未経験者へのアドバイス

6. プログラミング未経験者へのアドバイス
6. プログラミング未経験者へのアドバイス

CSVはとても汎用的なデータ形式です。まずは自分で小さなCSVファイルを作り、読み書きのコードを試すのがおすすめです。csv.reader()csv.writer()DictReaderDictWriterを覚えると、ほとんどのCSV操作ができるようになります。

ファイルを開くときはwith open()を使って閉じ忘れを防ぎましょう。また、文字化け防止のためにencoding="utf-8"をつける習慣をつけると安心です。

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

関連記事:

関連記事なし

Python のファイル処理の記事一覧へ
新着記事
New1
Python
Pythonの整数と浮動小数点数の違いとは?数値型の基本を解説
New2
Python
Pythonで文字列をリストに変換する方法!split()とjoin()の使い方
New3
Python
Pythonのbreakとcontinueの違いとは?ループの制御方法をマスター
New4
Python
Pythonのstartswith()・endswith()の使い方!文字列の前後をチェック
人気記事
No.1
Java&Spring記事人気No1
PHP
PHPの特殊文字とエスケープ処理を完全ガイド!初心者向けにhtmlspecialcharsとhtmlentitiesをやさしく解説
No.2
Java&Spring記事人気No2
PHP
PHP の文字列のフォーマット(sprintf, printf)
No.3
Java&Spring記事人気No3
Python
Pythonで文字列を置換する方法!replace()の使い方と正規表現の活用
No.4
Java&Spring記事人気No4
Python
Pythonでリストを分割する方法(スライス / split() / itertools)
No.5
Java&Spring記事人気No5
Python
Pythonのクロージャー(Closure)とは?関数内関数とnonlocalの活用
No.6
Java&Spring記事人気No6
Python
Pythonで経過時間を測る方法をやさしく解説!初心者向けtime.perf_counterとtime.sleepの使い方
No.7
Java&Spring記事人気No7
Python
Pythonのstartswith()・endswith()の使い方!文字列の前後をチェック
No.8
Java&Spring記事人気No8
PHP
PHPの認証機能を実装する方法!初心者でもわかるログイン・ログアウト処理の基本