2014-09-30 4 views
0

Иногда мне нужно получить только строки, содержащие определенную строку из текстового файла (например, при разборе файла журнала). Я обычно делаю это так:Эффективно извлекать строки, содержащие строку в Python

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() функции в данном случае выступает как итератор.

ответ

2

Избегайте вызова readlines, который генерирует список всех строк. Поэтому это должно быть быстрее

with open(TEXTFILENAME,'r') as f: 
    targets = [line for line in f if FINDSTRING in line] 
+0

Спасибо! Я знал, что что-то забыл. – pepoluan

Смежные вопросы