【发布时间】:2013-03-02 07:23:48
【问题描述】:
我发现了这个想法的变体,但没有一个能让我(对 python 非常陌生)到达我需要的地方。
这是场景:
- 我有一个巨大的 27 gig
hashfile.txt由单独的字符串组成。 - 我需要逐行解析这个文件,在另一个不太大 (~800mb)
addresses.txt文件中搜索匹配项 - 找到匹配项后,需要将其写入
outfile.txt
我当前的代码已尽我所能优化,但只能达到 150 行/秒左右。考虑到我的 hashfile.txt 中有超过 15 亿行,任何优化都会有所帮助。
fin = 'hashed.txt'
nonzeros = open('addrOnly.txt', 'r')
fout = open('hits.txt', 'w')
lines = nonzeros.read()
i = 0
count = 0
with open(fin, 'r') as f:
for privkey in f:
address = privkey.split(", ")[0]
if address in lines:
fout.write(privkey)
i = i+1
if i%100 == 0:
count = count + 100
print "Passed: " + str(count)
【问题讨论】:
-
您当前的代码是什么?这些文件是什么样的?
-
具体来说,您能描述一下您当前的算法吗?
-
@tor:大概这将是一个 IO-bound 问题(尽管这将取决于算法的选择),因此在这种情况下使用的特定语言不太可能产生如此大的影响。
-
@tor 这是一个极端的概括。请记住,像
str.find()这样的许多字符串函数是用 C(在 CPython 中)实现的,并且速度非常快。在我使用-O3编译之前,我所做的一个实用程序的 python 模型实际上比我的 C 实现高了约 10%。 -
不要使用列表进行查找,使用具有 O(1) 时间复杂度的东西,比如字典。
lines = dict.fromkeys(nonzeros.read().split("\n"), 1)。 编辑也不要使用大字符串进行查找。
标签: python search optimization large-files