我觉得这是一个非常愚蠢的问题,但我不能再考虑这个问题了。
我有csv格式的大量数据(60 + GB),按id:
排序id, "{data}"
id2, "{data}"
...
我有另一组数据需要以字典格式与这些数据结合(目前通过某些pickle文件分开):
{player_id: {rating, [ids]}, player_id2: {rating, [ids]}, ... }
csv数据中的id与上面列表中的ID相对应。我想从csv数据中将每个id的详细信息放入此数据中,这意味着我必须获取一个id,在csv数据中搜索它,然后将其写入此字典格式。因此,这里的大瓶颈是通过id查找csv文件中的数据并从磁盘读取它。
我目前的解决方案是将csv数据拆分成许多小文件(1-2mb)并索引哪些文件包含哪些ID,以便搜索数据比解析整个csv数据快得多,但仍然不是常数,仍然需要在每一步打开一个csv文件。
有更快的方法吗?我觉得我很傻,而且有更快的方法,因为我的多处理解决方案仍需要2周的时间才能完成。
很高兴澄清我的问题是否不清楚。谢谢。
答案 0 :(得分:0)
def get_row(id):
with open("fname.csv") as f:
row = next(itertools.islice(f,id-1,id),None)
return row
如果存储固定宽度的条目,你应该考虑使用数据库......或者至少将数据存储为固定宽度条目(即每行总共37个字节),它仍然会非常缓慢...你可以计算一个偏移offset = id*37;f.seek(offset);return f.read(37)
,那应该是〜大致恒定的时间......