python - 将 21 亿行的大型 csv 文件拆分为以列为 ID 的较小文件
问题描述
我有一个 1TB 的csv
文件格式
id data1 data2 ...
001 x1 y2
001 x2 y2
002 x1 y1
... ... ...
我希望每个 ID 都有一个文件,如
[001.csv]
001 x1 y2
001 x2 y2
[002.csv]
002 x1 y1
该文件包含带引号的字符串,并且不按 ID 排序。我可以运行查询以提前了解所有 ID。
在 linux 命令行或 python 中执行此操作的最佳方法是什么?
解决方案
在命令行上试试这个 - awk 很棒而且很优雅。(确保下面的双引号之间有正确数量的空格 - 即 id 和 data1 之间的空格
$ awk -F" " '{print >$1".csv"}' <your_1Tb_file>
这将创建 001.csv、002.csv 等文件
根据有关跳过第一行的评论进行编辑 - 您可能会这样做。这是一个 - 在 awk 之前添加一个管道。
$ tail +2 <your_1Tb_file> | awk -F" " '{print >$1".csv"}'
推荐阅读
- curl - SLURM:卷曲的作业无缘无故地取消了 2 卷曲 [JobState=CANCELLED 原因=无 ExitCode=0:15]
- pine-script - 如何在“过去 14 根蜡烛的时期/如何定义过去 14 根蜡烛的范围或时期?”中检查条件是真还是假?
- c++ - 怎么了?尽管#define _USE_MATH_DEFINES 和#include,M_PI 未声明错误
- java - Tomcat 9 上的 SSL Windows 认证错误
- java - 集成 Admob 的“App Open Ad”后的 IllegalStateException
- gpgpu - 使用 PGP 公钥生成指纹
- git - 在多个 Gît 存储库上同步多个 PR
- intersystems-iris - 将 IRIS 数据库拆分到多个驱动器
- matlab - 使用 matlab 的 ODE45 和 Runge-Kutta 方法对电晕进行优化控制
- java - 如果我在代码中将其与隐式等待一起使用,则显式等待不起作用