python开发推荐使用csv模块而非底层\_csv;读取用csv.reader(逐行列表)或csv.dictreader(带表头字典);写入用csv.writer或csv.dictwriter;注意编码、换行、字段类型转换等细节。

Python内置的_csv模块是底层实现,一般不直接使用;实际开发中推荐用csv模块(它封装并导出了_csv的功能),既稳定又易用。
读取CSV文件的基本方法
使用csv.reader逐行读取,返回可迭代对象,每行是字符串列表:
- 先用
open()以文本模式打开文件(注意编码,如encoding='utf-8') - 传入文件对象给
csv.reader(),可指定分隔符(delimiter=',')、引号规则等参数 - 遍历reader对象,每行自动按逗号拆分,并处理引号、换行、空格等常见格式问题
示例:
import csvwith open('data.csv', encoding='utf-8') as f:
reader = csv.reader(f)
for row in reader:
print(row) # 如 ['Alice', '25', 'Beijing']
处理带表头的CSV文件
用csv.DictReader更直观:自动把首行当字段名,后续每行返回字典:
立即学习“Python免费学习笔记(深入)”;
- 无需手动跳过标题行,
fieldnames参数可自定义列名 - 通过键名访问数据,比如
row['name']比row[0]更清晰、抗列序变化 - 若文件无表头,可传入
fieldnames=['id', 'name', 'age']
示例:
with open('users.csv', encoding='utf-8') as f:reader = csv.DictReader(f)
for row in reader:
print(row['name'], row['age'])
写入CSV文件的对应操作
写入用csv.writer或csv.DictWriter,逻辑对称:
-
csv.writer(f).writerow(['a', 'b', 'c'])写一行列表 -
csv.writer(f).writerows([['x','y'], ['m','n']])批量写入 -
DictWriter需先调用writeheader()写表头,再用writerow({})写字典数据 - 写入时注意指定
newline=''避免Windows下多出空行
常见问题与注意事项
CSV看似简单,但细节影响正确性:
- 编码错误最常见——中文乱码多半因没设
encoding='utf-8-sig'(兼容BOM) - 含逗号、换行符或引号的字段会被自动加引号保护,解析时
csv模块会正确还原 - 空行默认被跳过,如需保留,可用
skipinitialspace=True或手动判断if row: - 数值列读出来仍是字符串,需显式转换:
int(row[1])或用pandas自动推断类型










