搜索一大串短字符串

时间:2016-05-01 04:34:02

标签: string search text indexing

我有一个巨大的纯文本文件,包含10亿个字符串,平均字符串长度大约为10-12,可能有重复,每个字符串都在不同的行上。我的任务是,当给定查询字符串时,如果我的文件中存在字符串,则找到第一个匹配的行,或者返回“未找到”。

一个自然的解决方案是每次运行grep -m1 -n '^querystring$',大约需要15-20秒,这不需要额外的存储空间,也不需要占用大量内存。这是一个很好的解决方案,还是有更好的东西?

(N.B。作为粗略指南,我的存储要求:&lt; 10GB,内存要求:<16GB)

2 个答案:

答案 0 :(得分:0)

你可以使用一个简单的python代码:

file = 'file.txt'
queryLine = 0
with open(file, 'r') as f:
    for line in f:
        if <YOUR QUERY> in line: return queryLine 
        else: queryLine += 1

这样,你在找到匹配时就会中断,而是使用grep并且每次都会遍历整个文件。

答案 1 :(得分:0)

这是一个Python解决方案:

当你foldl1 (++)一个文件时,你得到一个迭代器,一次给你一行,这是非常有效的内存。我的建议是枚举文件并使第一行符合您的标准:

open

如果没有这样的行,则返回默认值def first_occurrence(filename, query): with open(filename) as f: filtered = (i for i, line in enumerate(f, 1) if query in line) return next(filtered, 'not found') 'not found'通过使用生成器表达式构建生成器。生成器是迭代器,因此这部分也是内存有效的。