用途
CSV Data Pipeline 用于处理表格数据(CSV、TSV、JSON、JSON Lines),基于标准命令行工具与 Python,除 Python 3 外不需要额外依赖。典型使用时机包括:用户提供 CSV/TSV/JSON 文件并要求分析、转换或生成报告;对表格数据进行连接、过滤、分组或聚合;在格式之间转换(如 CSV 转 JSON、JSON 转 CSV);去重、排序或清理脏数据;生成汇总统计或报告;以及 ETL 工作流(从一种格式抽取、转换、加载到另一种格式)。
主要能力
使用标准工具快速操作
查看数据:用 head -5 data.csv 预览前几行;用 tail -n +2 data.csv | wc -l 统计行数(不含表头);用 head -1 data.csv 查看列名;用 tail -n +2 data.csv | cut -d',' -f3 | sort -u | wc -l 统计某列唯一值数量。
用 awk 过滤:awk -F',' 'NR==1 || $3 > 100' data.csv > filtered.csv 保留表头并筛选第三列大于 100 的行;awk -F',' 'NR==1 || $2 ~ /pattern/' data.csv > matched.csv 按第二列模式匹配;awk -F',' 'NR>1 {sum += $4} END {print sum}' data.csv 对第四列求和。
排序与去重:按第二列数值排序时保留表头;按所有列去重;或用 awk -F',' '!seen[$2]++' data.csv > deduped.csv 按指定列去重并保留首次出现。
Python 复杂转换
读取与查看:提供 read_csv 与 write_csv 函数,将 CSV/TSV 读为字典列表或写回;可打印行数、列名以及每列非空计数。
过滤与变换:按条件筛选行、添加计算列(如 total = price * quantity)、重命名列、类型转换(数值与日期清理)。
分组与聚合:提供 group_by 与 aggregate 函数,支持 sum、avg、count、min、max,可按类别汇总收入等并写出 summary.csv。
连接数据集:提供 inner_join 与 left_join,按键列合并两个数据集;左连接会保留左表全部行,右表缺失字段填空字符串。
去重:deduplicate 可按指定关键列或全部列去除重复行,例如按 email 列去重。
格式转换
支持 CSV 转 JSON 数组、CSV 转 JSON Lines、JSON 转 CSV、JSON Lines 转 CSV,以及用 tr '\t' ',' < data.tsv > data.csv 将 TSV 转为 CSV。JSON Lines 转 CSV 时会先收集所有键并排序后写出。
数据清洗与校验
clean_csv 可去除键值空白、将 ''、N/A、NA、null、None、- 等归一化为空、将 true/yes/1/y 与 false/no/0/n 归一化为 true/false。validate_rows 按 schema(int、float、date、email、str)校验数据,返回有效行与错误行,错误信息包含行号、字段与原因。
生成报告与处理大文件
generate_report 可生成 Markdown 汇总报告,包含总行数与按分组的 Count、Sum、Avg、Min、Max 表格。stream_process 支持逐行流式处理 CSV,不将整个文件加载到内存,可在转换函数中返回 None 跳过该行。
使用方式
可直接在命令行中使用 head、tail、cut、sort、awk 等标准工具完成快速查看与筛选;更复杂的转换、连接、聚合、校验与报告生成则使用文中给出的 Python 代码模板。数据转换时使用 csv.DictReader 与 csv.DictWriter,JSON 使用 json 模块。
适用场景
数据分析与转换、多数据集连接、格式互转、数据清洗与去重、汇总统计与报告、ETL 流程,以及需要在不引入外部依赖情况下处理表格数据的场景。
限制与注意事项
资料未提供收费、价格、平台或性能基准等信息。使用提示包括:用 file -i data.csv 检查编码,BOM 文件用 encoding='utf-8-sig' 打开;Excel 导出中值含逗号时 csv 模块会自动处理引号;国际字符使用 json.dumps(ensure_ascii=False);管道分隔文件在 csv.reader/writer 中设置 delimiter='|';对非常大的聚合可考虑 Python 自带的 sqlite3,例如 sqlite3 :memory: ".mode csv" ".import data.csv t" "SELECT category, SUM(amount) FROM t GROUP BY category;"。