CSV(Comma-Separated Values)是一种轻量、通用且跨平台的数据文件格式。
它以纯文本记录表格数据,每一行代表一条记录,每个字段之间用分隔符(通常是逗号)隔开。
几乎所有表格软件(如 Excel、Numbers、Google Sheets)以及文本编辑器都能打开 CSV 文件。
一、CSV 格式特点
CSV 文件的扩展名通常为 .csv,也可以使用 .tsv(制表符分隔)作为变体。
其主要特点包括:
分隔符:用逗号 , 分列(也可用 \t 或 ; 等)。
表头:第一行通常是列名。
引用规则:若字段中包含逗号、引号或换行符,用双引号包裹字段,并将字段内的双引号写作 ""。
换行:每条记录独占一行。
编码:推荐 UTF-8;若为 Excel 兼容,使用 UTF-8-SIG。
缺失值:用空字符串或占位符(如 NA)表示。
示例:
3,Carol,这是一个包含逗号、引号与换行的 CSV 片段,展示了 CSV 的基本语法结构。
二、在 Python 中表示 CSV 数据
1、在内存中模拟 CSV 文件对象
当我们想在内存中处理 CSV 数据而不立即写入磁盘时,可以使用 标准库的 StringIO 方法:
print(buf.read())StringIO 适用于测试、临时存储或在网络请求中处理小型 CSV 内容。
2、使用列表与字典在内存中表示表格结构
在写入 CSV 之前,我们通常先在内存中准备结构化数据:
print(data)这种结构与 CSV 的“行–列”概念天然对应,方便后续用 csv.DictWriter 写入文件。
三、使用 csv 标准库读写 CSV 文件
Python 的标准库 专门用于 CSV 文件读写,能自动处理分隔符、引号与转义等细节。
1、写入 CSV 文件(DictWriter)
下面的示例演示如何将数据写入磁盘上的 students.csv 文件。
print("students.csv 文件已保存。")• 参数 newline="" 避免 Windows 下出现空行;
• utf-8-sig 确保 Excel 打开无乱码。
2、读取 CSV 文件(DictReader)
下面展示如何读取 students.csv 文件内容,并将每一行解析为字典。
print(row)输出结果:
{'id': '3', 'name': 'Carol', 'score': '90'}注意:csv 模块默认将所有字段读取为字符串类型,如需数值计算可显式转换。
3、使用自定义分隔符(TSV 文件)
下面示例展示如何写入使用制表符分隔的 TSV 文件。
writer.writerows(data)当字段中包含大量逗号时,可以改用制表符 \t,即 TSV 格式(Tab-Separated Values)。
4、防止 CSV 注入(安全写入)
某些表格软件(如 Excel)会把以 =、+、-、@ 开头的单元格当作公式执行,可能造成安全隐患。
写入前可添加单引号 ' 作为前缀:
return value生产环境中建议在写入前,对每个字符串字段调用 safe_cell()。
四、使用 pandas 处理 CSV 文件
第三方库 提供更高层的 CSV 支持,适合批量分析、筛选与统计。
1、使用 pandas 读取 CSV 文件
下面的示例展示如何快速加载并查看 CSV 文件内容。
print(df.head())输出:
2 3 Carol 90pandas 会自动解析表头、处理引号与编码,是数据分析的首选方案。
2、筛选与统计数据
下面的示例展示如何筛选出成绩大于等于 90 的学生,并计算平均分。
print("平均分:", avg_score)pandas 的 DataFrame 支持丰富的筛选与聚合运算,非常适合快速探索数据。
3、将结果写回新的 CSV 文件
print("高分学生表已保存为 top_students.csv。")写入时使用 index=False,可避免额外生成行索引列。
五、综合案例:从构造数据到统计分析
以下示例演示了 CSV 文件的完整流程:构造 → 写入 → 读取 → 筛选 → 统计 → 保存。
top.to_csv("top_students.csv", index=False, encoding="utf-8-sig")运行结果:
平均分:85.8此示例展示了 CSV 文件在数据分析中的完整生命周期:数据创建 → 存储 → 读取 → 处理 → 输出。
小结
csv 标准库:轻量级、跨平台,适合通用文件读写。
pandas:强大易用,适合复杂分析、筛选与统计。
建议配置:newline="" + encoding="utf-8-sig" 可最大化跨平台兼容。
安全性:写入前防止 CSV 注入;读取后注意字段类型转换。
“点赞有美意,赞赏是鼓励”
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.