csv 是 Python 标准库中专门处理 CSV(Comma-Separated Values)文件的模块,适合轻量级读写,不依赖外部库,广泛用于表格型数据的导入与导出。
常用功能
常用的属性和方法
方法 | 说明 | 示例 |
---|---|---|
csv.reader() | 从文件对象读取 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)
✅ 小贴士
- 需要读中文 CSV 可设:encoding='utf-8-sig' 或 'gbk'
- csv 模块速度快、兼容好,适合中小文件处理
- 对于大型或分析型数据,建议用 pandas.read_csv() 等