如何在 Python 中讀取和解析 CSV 文件

了解如何使用內建 csv 模組在 Python 中讀取和解析 CSV 檔案。掌握清單、字典閱讀器和自訂分隔符號的閱讀方式。

在編輯器中嘗試此解決方案

概述

CSV(逗號分隔值)是一種普遍存在的用於儲存表格資料集的檔案格式。無論是匯入資料庫、匯出電子表格或下載日誌,CSV 讀取都是一項核心技能。 Python 包含一個專用的、高度優化的內建「csv」模組,可以輕鬆解析 CSV 文件,而不需要 pandas 等第三方函式庫。

`csv.reader` 函數逐行讀取檔案並解析它,用逗號分隔符號分隔每一行並傳回字串清單。如果您的 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 模組。
  • 使用 with 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 資源

透過相關的互動式教學、備忘單和程式碼比較來擴展您的知識。