【问题标题】:Searching through a huge list of short strings搜索大量短字符串
【发布时间】:2016-08-26 01:49:01
【问题描述】:

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

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

(注意,作为粗略的指南,我的存储要求:

【问题讨论】:

    标签: string search text indexing


    【解决方案1】:

    这是一个 Python 解决方案:

    当你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'filtered = (...) 通过使用生成器表达式来构建生成器。生成器是迭代器,因此这部分内存效率也很高。

    【讨论】:

      【解决方案2】:

      你可以使用一个简单的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 并且每次都检查整个文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-04
        • 2020-01-27
        • 2023-03-11
        • 2015-12-25
        • 1970-01-01
        • 1970-01-01
        • 2015-02-25
        • 1970-01-01
        相关资源
        最近更新 更多