CSV 文件由纯文本组成,每一行代表表格中的一行数据,而每一列则通过逗号(或其他分隔符)分隔。
CSV 文件通常用于数据交换,因为它简单且易于处理。
1. 读取 CSV 文件
import csv
# 打开 CSV 文件
with open('data.csv', mode='r', encoding='utf-8') as file:
# 创建 csv.reader 对象
csv_reader = csv.reader(file)
# 逐行读取数据
for row in csv_reader:
print(row)
2. 写入 CSV 文件
import csv
# 要写入的数据
data = [
['Name', 'Age', 'City'],
['Alice', '30', 'New York'],
['Bob', '25', 'Los Angeles']
]
# 打开 CSV 文件
with open('output.csv', mode='w', encoding='utf-8', newline='') as file:
# 创建 csv.writer 对象
csv_writer = csv.writer(file)
# 写入数据
for row in data:
csv_writer.writerow(row)
3. 使用字典读取和写入 CSV 文件
使用 DictReader 读取 CSV 文件:
import csv
with open('data.csv', mode='r', encoding='utf-8') as file:
csv_dict_reader = csv.DictReader(file)
for row in csv_dict_reader:
print(row)
使用 DictWriter 写入 CSV 文件:
import csv
data = [
{'Name': 'Alice', 'Age': '30', 'City': 'New York'},
{'Name': 'Bob', 'Age': '25', 'City': 'Los Angeles'}
]
with open('output.csv', mode='w', encoding='utf-8', newline='') as file:
fieldnames = ['Name', 'Age', 'City']
csv_dict_writer = csv.DictWriter(file, fieldnames=fieldnames)
# 写入表头
csv_dict_writer.writeheader()
# 写入数据
for row in data:
csv_dict_writer.writerow(row)
常用的属性和方法
csv 模块核心方法
| 方法 |
说明 |
示例 |
csv.reader() |
从文件对象读取 CSV 数据 |
reader = csv.reader(file) |
csv.writer() |
将数据写入 CSV 文件 |
writer = csv.writer(file) |
csv.DictReader() |
将 CSV 行读取为字典(带表头) |
dict_reader = csv.DictReader(file) |
csv.DictWriter() |
将字典写入 CSV 文件(需指定字段名) |
dict_writer = csv.DictWriter(file, fieldnames) |
csv.register_dialect() |
注册自定义 CSV 格式(如分隔符) |
csv.register_dialect('mydialect', delimiter='|') |
csv.unregister_dialect() |
删除已注册的方言 |
csv.unregister_dialect('mydialect') |
csv.list_dialects() |
列出所有已注册的方言 |
print(csv.list_dialects()) |
csv.reader 和 csv.writer 对象常用方法
| 方法 |
说明 |
适用对象 |
__next__() |
迭代读取下一行(或使用 for 循环) |
reader |
writerow(row) |
写入单行数据 |
writer |
writerows(rows) |
写入多行数据(列表的列表) |
writer |
csv.DictReader 和 csv.DictWriter 对象特性
| 特性/方法 |
说明 |
示例 |
fieldnames |
字段名列表(DictReader 自动从首行获取) |
dict_reader.fieldnames |
writeheader() |
写入表头行(DictWriter 专用) |
dict_writer.writeheader() |
常用参数说明
| 参数 |
说明 |
示例值 |
适用方法 |
delimiter |
字段分隔符 |
','(默认), '\t' |
reader/writer |
quotechar |
引用字符(包围特殊字段) |
'"'(默认) |
reader/writer |
quoting |
引用规则 |
csv.QUOTE_ALL(全部引用) |
reader/writer |
skipinitialspace |
忽略分隔符后的空格 |
True / False |
reader |
lineterminator |
行结束符 |
'\r\n'(默认) |
writer |
dialect |
预定义的方言名称 |
'excel'(默认) |
所有方法 |