gpt4 book ai didi

python - 如何在 python 中更快地进行搜索?

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

我在另一个文件的行中搜索一个文件的值。确切的值只会在搜索文件中出现一次。我怎样才能使这个过程更快?这是我当前的代码:

filltaxlist = open("file with query number.txt", "rw")
fulltaxa = open("output file with hit line match", "rw")

for line in filltaxalist:
line = line.strip()
taxid = re.split("\t", line)
lookup = taxid[5] # this value is a number and I need the exact match only so I convert it to an integer
int1 = int(lookup)
for line in open("File to search.txt", "r"):
data = re.split(',', line)
hit = int(data[0]) # every value in this file is a number separated by a ,
if lookup in line:
if int1 == hit:
fulltaxa.write(line)

这很好用,因为它写得很慢。此外,我正在搜索的文件大小超过 1 GB。

filltaxlist 行示例:

cvvel_1234    403454663    29.43    3e-30    55.55555555234    1172189
cvell_1444 2342333 30.00 1e-50 34.34584359345 5911
cvell_1444 234230055 23.23 1e-60 32.23445983454 46245
cvell_1444 233493003 23.44 1e-43 35.23595604593 46245

fulltaxa 应该返回什么:

1172189, 5943, 1002030, 12345
5911, 11234, 112356, 234, 3456, 44568, 78356
46245, 123, 3432456, 123488976, 23564, 334
46245, 123, 3432456, 123488976, 23564, 334

最佳答案

使用数据库

正如其他人所提到的,最简单的方法可能是将其转储到数据库中(例如 sqllite)。如果您需要与该语言交互,您可以使用 python 绑定(bind)。

纯 Python 解决方案

对于filltaxlist中的每个条目,你都完整地阅读了fulltaxa(由于嵌套的顺序),先缓存所有查询,然后再阅读会更有效率fulltaxa 一次,然后对输出进行排序以重新获得 fulltaxa 的顺序。

由于查询的顺序是导入,我们应该使用 FIFO 结构 - deque在我们的案例中会做得很好。

from collections import defaultdict
filltaxlist = open("file with query number.txt", "rw")
fulltaxa = open("output file with hit line match", "rw")

possibles = {}
for i, line in enumerate(filltaxalist):
line = line.strip()
taxid = re.split("\t", line)
lookup = taxid[5] # this value is a number and I need the exact match only so I covert it to an integer
int1 = int(lookup)
possibles[int1] = i

output_lines = defaultdict(list)
for line in open("File to search.txt", "r"):
data = re.split(',', line)
hit = int(data[0]) # every value in this file is a number separated by a ,
if hit in possibles:
output_lines[possibles[hit]].append(line)

fulltaxa.writelines(line for lines in output_lines.values() for line in lines)

当你用完查询时,上面的代码将抛出一个 IndexError

一些其他的小改进。

data = re.split(',', line)

可能比

data = line.split(',')

但是您应该分析以确保这对您的情况有意义。

关于python - 如何在 python 中更快地进行搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17002832/

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