Python で CSV ファイルを読み取って解析する方法

組み込みの csv モジュールを使用して、Python で CSV ファイルを読み取り、解析する方法を学びます。リスト、辞書リーダー、カスタム区切り文字としての読み方をマスターします。

エディターでこのソリューションを試してください

概要

CSV (カンマ区切り値) は、表形式のデータセットを保存するための普遍的なファイル形式です。データベースのインポート、スプレッドシートのエクスポート、ログのダウンロードのいずれにおいても、CSV の読み取りは中核となるスキルです。 Python には、パンダのようなサードパーティ ライブラリを必要とせずに CSV ファイルを簡単に解析するための、高度に最適化された専用の組み込み `csv` モジュールが含まれています。

`csv.reader` 関数はファイルを 1 行ずつ読み取って解析し、各行をカンマ区切り文字で分割して文字列のリストを返します。 CSV ファイルにヘッダー行 (列ラベルなど) がある場合、多くの場合、`csv.DictReader` を使用することが推奨されます。各行を自動的に解析して、キーが列ラベルである辞書を作成し、コードをより読みやすくし、列順序の変更に対して堅牢にします。

CSV ファイルを開くときは、`open()` ステートメントで `newline=""` を設定することをお勧めします。これにより、Python による自動改行変換が妨げられ、特定のオペレーティング システムで解析エラーが発生する可能性があります。さらに、特殊文字を処理するには、常に `encoding="utf-8"` を指定してください。

コードと実行の出力

このスクリプトは、サンプル CSV ファイルの作成と、csv.reader と csv.DictReader の両方を使用したそのファイルの読み取りを示します。

import csv

# Writing a sample CSV file
sample_content = [
    ["name", "role", "salary"],
    ["Alice", "Developer", "90000"],
    ["Bob", "Manager", "110000"]
]
with open("employees.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    writer.writerows(sample_content)

# 1. Reading CSV using csv.reader (List representation)
print("--- Using csv.reader ---")
with open("employees.csv", "r", newline="", encoding="utf-8") as file:
    reader = csv.reader(file)
    header = next(reader) # Skip header row
    print("Header:", header)
    for row in reader:
         print(f"Employee: {row[0]} | Role: {row[1]}")

# 2. Reading CSV using csv.DictReader (Dictionary representation)
print("\n--- Using csv.DictReader ---")
with open("employees.csv", "r", newline="", encoding="utf-8") as file:
    dict_reader = csv.DictReader(file)
    for row in dict_reader:
         print(f"Name: {row['name']} | Role: {row['role']} | Salary: {row['salary']}")
端子出力
--- Using csv.reader ---
Header: ['name', 'role', 'salary']
Employee: Alice | Role: Developer
Employee: Bob | Role: Manager

--- Using csv.DictReader ---
Name: Alice | Role: Developer | Salary: 90000
Name: Bob | Role: Manager | Salary: 110000

段階的な実装

  • 組み込みの csv モジュールをスクリプトにインポートします。
  • ファイルとして open("employees.csv", "r", newline="", encoding="utf-8") を使用して CSV ファイルを開きます。
  • ファイル オブジェクトを csv.reader(file) に渡し、ファイルの行を文字列のリストとして解析します。
  • csv.DictReader(file) を使用して、列ヘッダーに対応する辞書マッピングとして行を解析します。

よくある質問

CSV ファイルを開くときに newline="" を設定する必要があるのはなぜですか?

newline="" を設定すると、Python が行末文字を動的に変更することがなくなり、csv モジュールがさまざまなオペレーティング システム間で csv スタイルの改行を正しく解析できるようになります。

カンマの代わりにタブまたはセミコロンを使用する CSV ファイルを解析するにはどうすればよいですか?

カスタム区切り文字をリーダー関数に渡すことができます: csv.reader(file, delimiter="\t") または csv.reader(file, delimiter=";")。

関連トピック

推奨される Python リソース

関連するインタラクティブなチュートリアル、チートシート、コード比較で知識を深めてください。