Python 根据关键字列表快速过滤行的方法

T A*_*T A 1 python algorithm indexing for-loop

我有一个包含数千行的文本文件,其中包含一些字符串,该字符串在某个位置包含一个唯一的标识符 - 以及我想要过滤的标识符列表。

我想从此文件中提取包含过滤器列表中的任何标识符的所有行。目前我正在用两个嵌套循环解决这个问题:

    found = []
    for identifier in ids:
        with open("file.txt", 'r') as f:
            for line in f.readlines():
                if identifier in line:
                    found.append(line)
Run Code Online (Sandbox Code Playgroud)

然而,这非常慢,因为我运行了两个嵌套循环,并且标识符列表和文本文件都很大。python 中是否有一种智能、更高效的方法可以在小于O(n^2)的时间内解决这个问题?

更多信息和限制:

  • 任何行只能包含我的列表中的一个标识符或不包含标识符
  • 我无法根据标识符对文件进行排序,因为它们不一定具有可以分层结构的形式

WBM*_*WBM 5

重新排序代码应该会加快速度,这样您只需读取文本文件一次。

f = open("demofile.txt", "r")
mylines = f.readlines()
                       
found = []
for line in mylines:
   for identifier in ids:
      if identifier in line:
          found.append(line)
Run Code Online (Sandbox Code Playgroud)