从文件对象读取 CSV 数据,for row in csv_reader:逐行读取文件内容,每一行数据会被解析为一个列表。
reader = csv.reader(file)
csv.writer()
将数据写入 CSV 文件
writer = csv.writer(file)
csv.DictReader()
将 CSV 行读取为字典(带表头),将 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'(默认)
所有方法
实例
读取 CSV 文件
python复制代码
import csv
with open('data.csv', 'r') as file:
reader = csv.reader(file, delimiter=',')
for row in reader:
print(row) # 每行是一个列表
写入 CSV 文件
python复制代码
data = [['Name', 'Age'], ['Alice', 25], ['Bob', 30]]
with open('output.csv', 'w', newline='') as file:
# newline='' 用于避免在 Windows 系统中出现空行。
writer = csv.writer(file)
writer.writerows(data) # 写入多行
使用 DictReader 和 DictWriter(带表头)
python复制代码
# 读取
with open('data.csv', 'r') as file:
dict_reader = csv.DictReader(file)
for row in dict_reader:
print(row['Name'], row['Age']) # 通过字段名访问
# 写入
fieldnames = ['Name', 'Age']
with open('output.csv', 'w', newline='') as file:
dict_writer = csv.DictWriter(file, fieldnames=fieldnames)
dict_writer.writeheader() # 写入表头
dict_writer.writerow({'Name': 'Alice', 'Age': 25})
自定义方言(如处理 TSV 文件)
python复制代码
csv.register_dialect('tsv', delimiter='\t', quoting=csv.QUOTE_NONE)
with open('data.tsv', 'r') as file:
reader = csv.reader(file, dialect='tsv')
for row in reader:
print(row)