python - 使用多处理读取大文件并创建字典?(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 万行时。
解决方案
推荐阅读
- android - Android Studio 在 osx Big Sur 上的加载速度保持在 80% 左右
- javascript - 试图从表单中检索 cookie 并仅在 javascript 中显示他的信息
- flutter - 先显示输入再模糊密码场效应
- python - Discord.py Intents 使我的机器人不响应任何内容
- java - Spigot 无法将事件 BlockPlaceEvent 传递给插件 v1.0
- c - 如何在 MacOS 上用 C 打印表格?
- prolog - 填充列表(作为数组):没有切割,回溯在给出正确的产生后导致无限递归
- c# - C# UdpClient ReceiveAsync() 性能问题
- mysql - 如何根据条件显示评论
- swift - Swiftui scale效果翻译