Python IN 与 grep

Python IN vs grep

我有一个脚本可以遍历数十万个文件的文件内容以找到特定的匹配项。为方便起见,我使用字符串 in。两者之间的性能差异是什么?我在这里寻找更多的概念性理解。

list_of_file_contents = [...] # 1GB
key = 'd89fns;3ofll'
matches = []
for item in list_of_file_contents:
    if key in item:
        matches.append(key)

--对--

grep -r my_files/ 'd89fns;3ofll'

我建议您亲自尝试一下。分析 Python 代码非常简单:。对于更概念化的方法。 Regex 是一个功能强大的字符串解析引擎,功能齐全,相比之下 Python "in" 只会以非常简单的方式做一件事情。我会说后者会更有效率,但还是要自己尝试一下。

概念上最大的区别是grep做的是正则表达式匹配。在 python 中,您需要使用 re 模块显式编写代码。您的示例中的搜索表达式没有利用任何丰富的正则表达式,因此搜索的行为就像 python 中的纯字符串匹配一样,并且只比 fgrep 消耗的资源多一点点。 python 脚本确实是 fgrep,希望能与之媲美。

如果文件是编码的,比如 UTF-16,根据不同程序的版本,是否找到匹配项可能会有很大差异,并且需要多长时间。

并且假设实际的 python 代码有效地处理输入和输出,即 list_of_file_contents 不是实际的数据列表,而是例如围绕 [=12 的列表理解=];并且没有大量的匹配项或不同的 matches.