一尘不染

如何根据第一列的内容拆分一个巨大的csv文件?

linux

  • 我有250MB以上的巨大的CSV文件要上传
  • 文件格式为group_id, application_id, reading,数据可能看起来像
1, a1, 0.1
1, a1, 0.2
1, a1, 0.4
1, a1, 0.3
1, a1, 0.0
1, a1, 0.9
2, b1, 0.1
2, b1, 0.2
2, b1, 0.4
2, b1, 0.3
2, b1, 0.0
2, b1, 0.9
.....
n, x, 0.3(lets say)
  • 我想基于划分文件group_id,因此输出应为n个文件,其中n=group_id

输出量

File 1

1, a1, 0.1
1, a1, 0.2
1, a1, 0.4
1, a1, 0.3
1, a1, 0.0
1, a1, 0.9

File2
2, b1, 0.1
2, b1, 0.2
2, b1, 0.4
2, b1, 0.3
2, b1, 0.0
2, b1, 0.9
.....

File n
n, x, 0.3(lets say)

我该如何有效地做到这一点?


阅读 296

收藏
2020-06-02

共1个答案

一尘不染

如果文件已经按排序group_id,则可以执行以下操作:

import csv
from itertools import groupby

for key, rows in groupby(csv.reader(open("foo.csv")),
                         lambda row: row[0]):
    with open("%s.txt" % key, "w") as output:
        for row in rows:
            output.write(",".join(row) + "\n")
2020-06-02