Python 基础:深入了解 CSV 文件的写入与读取
在 Python 中,处理 CSV(Comma-Separated Values,逗号分隔值)文件是非常常见的任务,尤其是在数据处理和分析领域。Python 提供了一个内置的 csv
模块,使得读取和写入 CSV 文件变得简单和高效。以下是关于 CSV 文件的读取和写入的一些深入讲解。
1. 读取 CSV 文件
读取 CSV 文件主要使用 csv.reader
或 csv.DictReader
。前者适用于简单的行数据读取,后者则适用于将数据作为字典读取。
使用 csv.reader
import csv
with open('example.csv', newline='') as csvfile:
csvreader = csv.reader(csvfile)
for row in csvreader:
print(row)
- 参数:
newline=''
是推荐的,因为在不同的平台上可能会导致意外的换行符行为。 - 返回值:每一行的数据作为一个列表返回。
使用 csv.DictReader
import csv
with open('example.csv', newline='') as csvfile:
csvreader = csv.DictReader(csvfile)
for row in csvreader:
print(row)
- 功能:每行被自动解析为字典,列标题用作字典的键,这样便于访问特定列的数据。
- 适用场景:当 CSV 文件有标题行时,使用
DictReader
可以提高代码的可读性和可维护性。
2. 写入 CSV 文件
写入 CSV 文件通常使用 csv.writer
或 csv.DictWriter
。
使用 csv.writer
import csv
data = [['Name', 'Age', 'City'],
['Alice', 30, 'New York'],
['Bob', 25, 'Los Angeles']]
with open('output.csv', 'w', newline='') as csvfile:
csvwriter = csv.writer(csvfile)
csvwriter.writerows(data)
- 方法:
writerow(row)
: 写入单行。writerows(rows)
: 写入多行。
使用 csv.DictWriter
import csv
fieldnames = ['Name', 'Age', 'City']
data = [
{'Name': 'Alice', 'Age': 30, 'City': 'New York'},
{'Name': 'Bob', 'Age': 25, 'City': 'Los Angeles'}
]
with open('output.csv', 'w', newline='') as csvfile:
csvwriter = csv.DictWriter(csvfile, fieldnames=fieldnames)
csvwriter.writeheader() # 写入表头
csvwriter.writerows(data)
- 功能:通过字典的键与 CSV 列头进行关联,便于动态结构的写入。
- 优点:自动处理列头,减少手动管理的繁琐。
3. 常见注意事项
- 编码问题:默认情况下,Python 会假定文件的编码为系统默认编码(通常是 UTF-8),必要时应显式指定文件的编码,如
encoding='utf-8'
。 - 分隔符:CSV 文件并不一定要用逗号作为分隔符。可以通过
csv.reader
和csv.writer
的delimiter
参数指定其他分隔符,如delimiter=';'
。 - 数据的清理:在处理过程中,注意数据的清理,如移除空行、去除多余的空格等,以保证数据的一致性和正确性。
- 错误处理:使用
try-except
块来捕获和处理读取或写入过程中的 I/O 错误。
通过上述方法和注意事项,你可以在 Python 中轻松处理 CSV 文件,为数据分析和管理工作打下坚实基础。