第一归属CSVComma-Separated Valuescsv是 Python 内置的标准库它解决了手动处理 CSV 时的诸多坑比如字段包含逗号、换行符、引号等特殊情况无需额外安装是处理表格类文本数据的首选工具专门用于处理 CSV逗号分隔值格式的文件一、核心功能与基础用法读取 CSV 文件csv库提供csv.reader()和csv.DictReader()两种读取方式后者更易用按列名取值示例 1基础读取csv.readerimportcsv# 读取 CSV 文件假设 test.csv 内容如下# 姓名,年龄,城市# 张三,25,北京# 李四,30,上海# 王五,28,广州# 方式1csv.reader返回列表形式的行withopen(test.csv,r,encodingutf-8)asf:# 创建 reader 对象readercsv.reader(f)# 获取表头第一行headernext(reader)print(表头,header)# 输出表头 [姓名, 年龄, 城市]# 遍历每一行数据forrowinreader:# row 是列表通过索引取值namerow[0]agerow[1]cityrow[2]print(f姓名{name}年龄{age}城市{city})示例 2字典形式读取csv.DictReader推荐importcsvwithopen(test.csv,r,encodingutf-8)asf:# 创建 DictReader 对象自动将第一行作为键readercsv.DictReader(f)# 遍历每一行行是字典按列名取值forrowinreader:namerow[姓名]agerow[年龄]cityrow[城市]print(f姓名{name}年龄{age}城市{city})写入 CSV 文件对应有csv.writer()和csv.DictWriter()两种写入方式示例 1基础写入csv.writerimportcsv# 要写入的数据data[[姓名,年龄,城市],[赵六,32,深圳],[孙七,27,杭州]]# 写入 CSV 文件newline 避免每行多空行withopen(output.csv,w,encodingutf-8,newline)asf:# 创建 writer 对象writercsv.writer(f)# 写入单行表头writer.writerow(data[0])# 写入多行数据writer.writerows(data[1:])示例 2字典形式写入csv.DictWriter推荐importcsv# 表头键名fieldnames[姓名,年龄,城市]# 要写入的数据字典列表data[{姓名:周八,年龄:29,城市:成都},{姓名:吴九,年龄:31,城市:重庆}]withopen(output_dict.csv,w,encodingutf-8,newline)asf:# 创建 DictWriter 对象指定表头writercsv.DictWriter(f,fieldnamesfieldnames)# 先写入表头writer.writeheader()# 写入多行数据writer.writerows(data)二、进阶用法处理特殊场景自定义分隔符如制表符 \t、分号CSV 不一定用逗号分隔比如欧洲常用分号可通过delimiter参数指定importcsv# 读取分号分隔的 CSVwithopen(semicolon.csv,r,encodingutf-8)asf:readercsv.reader(f,delimiter;)forrowinreader:print(row)# 写入制表符分隔的 CSVwithopen(tab_sep.csv,w,encodingutf-8,newline)asf:writercsv.writer(f,delimiter\t)writer.writerow([姓名,年龄,城市])writer.writerow([郑十,26,南京])处理带引号的字段CSV 中如果字段包含逗号 / 换行符会用引号包裹csv库会自动处理importcsv# 写入带特殊字符的字段data[[姓名,描述],[钱十一,爱好读书,跑步\n职业程序员]# 包含逗号和换行符]withopen(quote_test.csv,w,encodingutf-8,newline)asf:writercsv.writer(f,quotingcsv.QUOTE_ALL)# 所有字段加引号writer.writerows(data)# 读取验证自动解析引号内的特殊字符withopen(quote_test.csv,r,encodingutf-8)asf:readercsv.reader(f)forrowinreader:print(row[1])# 输出完整的描述包含逗号和换行符quoting参数可选值csv.QUOTE_ALL所有字段加引号csv.QUOTE_MINIMAL仅特殊字段含分隔符 / 换行符加引号默认csv.QUOTE_NONNUMERIC非数字字段加引号csv.QUOTE_NONE不加引号读取 / 写入时转换数据类型csv读取的所有字段默认是字符串可手动转换importcsvwithopen(test.csv,r,encodingutf-8)asf:readercsv.DictReader(f)forrowinreader:# 将年龄从字符串转为整数ageint(row[年龄])print(f{row[姓名]}的年龄是{age}类型{type(age)})三、常见坑与注意事项编码问题中文 CSV 建议用encodingutf-8如果读取乱码可尝试gbk/gb2312Windows 生成的 CSV 常用newline‘’写入时必须加newline否则 Windows 系统下每行之间会多出一个空行空值处理csv库读取空字段会返回空字符串需自行判断处理比如转为None大文件处理csv库是逐行读取 / 写入内存占用低适合处理大 CSV 文件无需一次性加载全部数据总结csv是 Python 内置库无需安装专门处理 CSV 文件能自动处理特殊字符逗号、引号、换行符核心用法分两类reader/writer列表形式和DictReader/DictWriter字典形式推荐按列名取值更直观关键参数delimiter自定义分隔符、quoting控制引号规则、写入时加newline避免空行中文文件指定encodingutf-8或gbk