【发布时间】:2015-08-20 13:14:41
【问题描述】:
我有一个 CSV(约 150 万行),格式如下:
id, tag1, tag2, name1, value1
有几行具有相同的 id。如果一行具有相同的 id,它将具有相同的 tag1 和 tag2。所以,我想做的是在行的末尾附加name1, value1,这将是不同的。
例子:
Original:
id,tag1,tag2,name1,value1
12,orange,car,john,32
13,green,bike,george,23
12,orange,car,elen,21
Final:
id,tag1,tag2,name1,value1
12,orange,car,john,32,elen,21
13,green,bike,george,23
我能做到这一点的唯一方法是使用 Python 中的蛮力脚本。使用 id 的键创建一个字典,然后创建一个包含所有其他参数的列表。每次我找到一个已经在字典中的 id 时,我只需将字典值中的最后两个字段附加为一个列表。
但是,在如此大的文件中执行此操作并不是最有效的方法。有没有其他方法可以做到这一点,也许是图书馆?
【问题讨论】:
-
实际上,假设您有足够的内存存储所有数据,这是最有效的方法。
-
根据您的示例,您的数据未排序,那么使用您的方法是唯一可行的解决方案。如果数据已排序,那么您只需将最后读取的行保留在内存中。
-
@Kay 你能给一个排序的 CSV 的答案,所以我可以接受吗?在开始处理之前,我可以轻松地对 CSV 进行排序。
-
@Tasos 如果您从数据库中导出 CSV,那么为什么不在查询中进行正确的分组呢?假设您使用支持它的数据库。
-
@Tasos 好吧,您问的是一种有效的方法,而不是一种简单的方法。 :D 老实说,我怀疑排序会更快。如果我错了,请告诉我。