2013-10-05 2 views
2

그래서, 배쉬 스크립트에서 사용하는 I 정상적으로 될 것 bash는 명령이 될 것 같은 뭔가 :Python에서 Grep보다 빠름?

$ cat huge2GBfile.txt | grep -w "pattern1/|pattern2/|pattern3" > out.txt 

이를 출력이 pattern1,2,3을 발견했다 huge2GBfile의 라인. 이것이 파이썬을 통해 성취 할 수 있는지 궁금합니다. 나는

os.system(cmd) 

을 사용할 수 있습니다하지만 파이썬에서 비슷한 (I 완전한 멍청한 놈입니다)이 있으면 알고 싶어하고 고양이 + GREP을 사용하는 것보다 더 빠른 경우 거라고 알고 있습니다. 감사합니다.

초기 생각은,

for line in f: 
    if pattern in line: 
      out.write(line) 

같은 빠른 것?

+8

(!) 참고 : 같은 것을 사용할 수'고양이 X를 | grep Y'는'grep Y X' ([UUOC] (http://partmaps.org/era/unix/award.html)) – miku

+2

...으로 짧게 쓸 수 있으며 더 빨라질 것입니다. –

+3

그리고'cat X | anytool'은 일반적으로'anytool geoffspear

답변

3

grep 논리가 사용하는 것보다 나은 알고리즘을 사용하더라도 (이미 논평 한 바에 따르면 grep은 30 년입니다!), C로 작성된 유틸리티이며 네이티브로 컴파일된다는 사실은 여전히 ​​남아 있습니다 시스템 용.

파이썬은 해석 된 언어이며 네이티브 C보다 몇 배 더 느릴 수 있습니다. 따라서 대답은 '아니오'라고 대답 할 것이지만 파이썬에서는 더 빠를 수있는 방법이 없습니다.

grep 명령의 출력을 한 줄씩 처리하려면 옵션을 표준 입력란에서 읽고 stdout에 쓸 수 있도록 unix 명령 줄 도구와 비슷한 Python 스크립트를 작성해야합니다.

grep pattern file | python myscript.py 

How do you read from stdin in Python?