gpt4 book ai didi

python - 在 Python 中将列表项与大文件中的行匹配的最有效方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 11:10:00 25 4
gpt4 key购买 nike

我有一个名为 my_file 的大文件 (5Gb)。我有一个名为 my_list 的列表。读取文件中每一行的最有效方法是什么,如果 my_list 中的项目与 my_file 中的行中的项目相匹配,则创建一个名为 的新列表>matches 包含 my_file 中的行中的项目以及 my_list 中发生匹配的项目。这是我正在尝试做的事情:

def calc(my_file, my_list)
matches = []
my_file.seek(0,0)
for i in my_file:
i = list(i.rstrip('\n').split('\t'))
for v in my_list:
if v[1] == i[2]:
item = v[0], i[1], i[3]
matches.append(item)
return matches

my_file 中有几行:

lion    4    blue    ch3
sheep 1 red pq2
frog 9 green xd7
donkey 2 aqua zr8

这是 my_list 中的一些项目

intel    yellow
amd green
msi aqua

在上面的示例中,所需的输出是一个列表列表:

[['amd', 9, 'xd7'], ['msi', 2, 'zr8']]

我的代码目前可以正常工作,尽管速度很慢。使用生成器或序列化会有帮助吗?谢谢。

最佳答案

你可以构建一个字典来查找 v。我添加了进一步的小优化:

def calc(my_file, my_list)

vd = dict( (v[1],v[0]) for v in my_list)

my_file.seek(0,0)
for line in my_file:
f0, f1, f2, f3 = line[:-1].split('\t')
v0 = vd.get(f2)
if v0 is not None:
yield (v0, f1, f3)

对于大型 my_list,这应该会快得多。

使用 get 比检查 i[2] 是否在 vd + 访问 vd[i[2]] 更快

为了获得超越这些优化的更多加速​​,我推荐 http://www.cython.org

关于python - 在 Python 中将列表项与大文件中的行匹配的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7346770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com