【发布时间】:2020-05-25 22:44:26
【问题描述】:
试图捕获控制台输出并在其中找到关键字, 哪种方法应该更快? 例如:尝试通过python运行“ls”命令并检查控制台输出中是否存在关键字
第一种方法 有一个字符串列表,然后在每个字符串中搜索
list_output = [ "abc", "def", "xyz"]
for i in list_output:
if "ab" in i:
print "found"
break
请注意:list_output 中的每个项目本身都可能是一个大字符串
第二种方法 有一个大字符串并在大字符串中搜索一个子字符串
string_output = "abcdefxyz"
if "ab" in S:
print "found"
请注意:string_output 可能是一个很大的字符串
一旦找到第一个匹配项就需要停止搜索,无需搜索整个字符串或进一步列出
【问题讨论】:
-
我认为第一种方法很好。第二种方法可能会导致内存问题。
-
您不想使用第二个,因为输入错误,例如
efx当它可能是错误的时候,你可能会被“找到”。 -
这些“大字符串”有多大?数百万或数十亿字节?你把它们分成什么?如果这是
ls的输出,我不希望它非常小(通常远小于一个MB),为什么不使用pathlib? -
"ls" 只是一个示例命令,它可以是任何 linux 命令。是的,这些命令的输出不应超过 1 MB,我正在拆分 on "\n"
-
与其将
ls的输出直接传递给python,不如先通过grep来提取您要查找的术语?它在匹配字符串方面肯定比你用 python 编写的任何东西都要快。
标签: python algorithm optimization compare