有时我只需要从文本文件中获取包含某个字符串的行(例如,在解析日志文件时)。我通常这样做:
with open(TEXTFILENAME,'r') as f:
contents = f.readlines()
targets = [s for s in contents if FINDSTRING in s]
然而,我看到那里有一个可能的双线:
with open(TEXTFILENAME,'r') as f:
targets = [s for s in f.readlines() if FINDSTRING in s]
我想知道第二种方法是否更有效,在这种情况下readlines()
函数是否作为排序的迭代器。
答案 0 :(得分:2)
避免调用readlines
,这会生成所有行的列表。因此,这应该更快
with open(TEXTFILENAME,'r') as f:
targets = [line for line in f if FINDSTRING in line]