如何在 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 读取它。
read_csv.py
在编辑器中尝试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 资源
通过相关的交互式教程、备忘单和代码比较来扩展您的知识。