首页 > 解决方案 > 使用多处理读取大文件并创建字典?(Python)

问题描述

我有一个大文件(> = 1GB),我正在尝试阅读,然后将内容上传到字典中。仅使用一次读取一行的简单代码,只需大约 8 分钟即可读取文件并填充字典。我正在使用的代码片段如下:

with open(filename, 'r') as f:
    for line in f:
        toks = line.rstrip().split()
        id1 = toks[0]
        id2 = toks[1]
        start = int(toks[4])
        end = int(toks[5])

        if id1 not in my_dict:
            my_dict[id1] = [[start, end]]
        else:
            if [start, end] not in my_dict[id1]:
                my_dict[id1].append([start,end])

       if id2 not in my_dict:
            my_dict[id2] = [[start, end]]
        else:
            if [start, end] not in my_dict[id2]:
                my_dict[id2].append([start,end])

现在,单独运行这段代码需要很长时间,我想知道我是否可以使用多处理来加速这个过程?我已经研究了一些与我想做的事情很接近的材料,比如这里这里以及许多其他材料。但是,鉴于我对此很陌生,我什至在努力决定多处理是否是正确的方法。此外,在大多数可用的与多处理相关的资源中,它们没有解释我们如何更新字典。我想我在某处读到共享同一个字典是个坏主意。我希望我的问题可以更具体一些,希望不会被标记为不适合 SO,但我只想加快构建字典的过程。

编辑

在@juanpa.arrivillaga 提出建议后,我的代码如下所示:

import collections

my_dict = collections.defaultdict(set)
with open(filename, 'r') as f:
    for line in f:
        toks = line.rstrip().split()
        id1 = toks[0]
        id2 = toks[1]
        start = int(toks[4])
        end = int(toks[5])

        my_dict[id1].add((start,end))
        my_dict[id2].add((start,end))

这将我的时间减少到大约 21 秒,当在一个大小约为 500MB 的文件上运行 1100 万行时。

标签: pythondictionarymultiprocessinglarge-files

解决方案


推荐阅读