CSV 文本处理完全指南
← 返回博客
CSV 文本处理完全指南
· 5 分钟阅读
CSV 格式基础
CSV(Comma-Separated Values,逗号分隔值)是最通用的表格数据文本格式。每行代表一条记录,字段之间用逗号分隔,第一行通常是标题行。当字段值本身包含逗号或换行符时,需要用双引号将值括起来(引号内的逗号不作为分隔符)。CSV 格式简单但有许多细节陷阱,不同工具对边缘情况的处理方式不同。
CSV 常见问题
- 编码问题:Windows Excel 默认使用 ANSI/GBK 编码保存 CSV,在 macOS 或 Linux 上用 UTF-8 打开会出现中文乱码
- BOM 标记:Excel 导出的 UTF-8 CSV 文件开头通常有 BOM(EF BB BF),导致某些程序无法正确解析第一行
- 分隔符变体:在德语等地区设置中,分隔符可能是分号(;)而不是逗号
- 多余空格:字段前后有多余空格影响精确匹配
- 不一致的行数:部分行的字段数与标题行不一致
命令行处理 CSV
# 查看 CSV 文件前 10 行
head -n 10 data.csv
# 按第二列排序(数字排序,逗号分隔)
sort -t',' -k2 -n data.csv
# 提取第一列和第三列
cut -d',' -f1,3 data.csv
# 统计行数(减去标题行)
wc -l data.csv
# 使用 csvkit(需安装)
# 按列名排序
csvsort -c "column_name" data.csv
# 查看特定列
csvcut -c "name,email" data.csv | csvlook
Python pandas 处理 CSV
import pandas as pd
# 读取 CSV(处理编码和 BOM)
df = pd.read_csv('data.csv', encoding='utf-8-sig')
# 基本清理
df.columns = df.columns.str.strip() # 去除列名空白
df = df.dropna(how='all') # 删除全空行
df = df.drop_duplicates() # 删除重复行
# 清理文本列
df['name'] = df['name'].str.strip().str.title()
df['email'] = df['email'].str.strip().str.lower()
# 按列排序
df_sorted = df.sort_values('date', ascending=False)
# 导出(UTF-8 带 BOM 供 Excel 正确显示)
df.to_csv('output.csv', index=False, encoding='utf-8-sig')
CSV 与其他格式的互转
CSV 经常需要与其他格式互转:CSV 转 JSON(适合 API 数据交换);CSV 转 Excel(保留格式和公式);CSV 转 SQL INSERT 语句(用于数据库导入);CSV 转 Markdown 表格(用于文档);TSV(制表符分隔)与 CSV 互转。在线格式转换工具或 Python pandas 都能高效完成这些转换。
Excel 用户的 CSV 注意事项
Excel 用户使用 CSV 时需要注意:直接双击打开 CSV 文件,Excel 可能将纯数字的字段解释为数字(如邮政编码 "01234" 变成数字 1234,丢失前导零);通过"数据导入"而不是双击打开,可以在导入向导中指定每列的数据类型;保存时选择"CSV (UTF-8)"而不是普通 "CSV",避免中文乱码问题;Excel 的 CSV 导出可能对包含换行符的字段处理不当。
大型 CSV 文件的处理策略
对于超过内存容量的大型 CSV 文件(如 GB 级别),直接加载到内存会失败。处理策略:使用 pandas 的分块读取(chunksize 参数)逐块处理;使用 Polars 库(比 pandas 更内存高效,支持懒加载);使用 DuckDB 将 CSV 文件作为虚拟数据库表查询;使用命令行工具(awk、sort)流式处理;考虑将 CSV 数据导入真正的数据库进行查询。
立即尝试在线工具,无需安装,免费使用。
打开工具 →
立即免费使用相关工具
免费使用 →