2011-03-09 4 views
8

파이썬에서는 "apple"이라는 단어가 포함 된 텍스트 파일의 줄을 필터링하고 그 줄을 새 텍스트 파일에 쓰려고합니다. 필자가 시도한 것은 새로운 텍스트 파일에 "사과"라는 단어를 쓰는 반면 전체 줄은 필요합니다. 저는 파이썬에서 초보자입니다. 제 질문에 친절하게 답변 드리겠습니다. 정말 필요합니다.Python : 특정 단어가 들어있는 텍스트 파일의 줄을 필터링하십시오.

답변

16

를 사용하여 모든 라인이 목록-이해하여 '사과'를 포함 얻을 수 있습니다 : - - 또한 하나의 코드 라인에 따라서

[ line for line in open('textfile') if 'apple' in line] 

을 새 TEXTFILE 만들 수 있습니다

open('newfile','w').writelines([ line for line in open('textfile') if 'apple' in line]) 

을 그리고 eyquem 오른쪽 : 그것은 반복자로 유지하고 쓸 확실히 ​​빠르다

open('newfile','w').writelines(line for line in open('textfile') if 'apple' in line) 
+3

읽을 수없는 뇌 손상을 쉽게 솔루션을 사랑

def apple_finder(file): for line in file: if 'apple' in line: yield line source = open('forest','rb') apples = apple_finder(source) 

빠릅니다. 생성자 표현식을 사용하는 것이 더 좋을 것입니다. 그건 그렇고''필자는''필자의 라인''apple line ''에''line in open ('textfile ') 줄을 쓸 수있다.'' – eyquem

+0

@eyquem : 좋아, 나는 대용량 파일의 경우 발전기는 게으르게 동작하므로 많은 메모리를 소비하지 않기 때문에 발전기를 사용하는 것이 좋습니다. 그러나 작은 파일의 경우 목록 이해가 더 빠른 솔루션일까요? – phynfo

+0

@Phynfo : 아니요 ... 생성기/반복기를 유지하는 것이 훨씬 효율적입니다. 리스트 이해력은 여전히 ​​iterator를 생성하고 있습니다. iterator는리스트를 채우고 일단리스트를 작성 라인으로 전달하면 iterator로 되돌립니다. –

1

if "apple" in line: 작동해야합니다. 발전기를 사용

8
from itertools import ifilter 

with open('source.txt','rb') as f,open('new.txt','wb') as g: 

    g.writelines(ifilter(lambda line: 'apple' in line, f)) 
5

,이 메모리 효율적이고 나는 목록 이해가 객체를 생성 :-)

+1

' apple_finder (file) **는 함수 발생기이고 ** apples **는 생성기입니다. 후자는 ** ifilter (람다 줄 : '사과', f) **와 같은 작업을 ** 두 줄 (수입 포함) – eyquem

관련 문제