使用Python

时间:2016-07-12 04:25:44

标签: python csv indexing

我觉得这是一个非常愚蠢的问题,但我不能再考虑这个问题了。

我有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周的时间才能完成。

很高兴澄清我的问题是否不清楚。谢谢。

1 个答案:

答案 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),那应该是〜大致恒定的时间......