2014-05-14 3 views
2

두 개의 ± 6GB 파일을 분석하려고합니다. 동시에 두 줄 (각 ​​파일에서 하나씩)이 필요하기 때문에 동시에 분석해야합니다.Python은 두 개의 큰 파일을 한 줄씩 동시에 분석합니다.

with open(fileOne, "r") as First_file: 
    for index, line in enumerate(First_file): 

     # Do some stuff here 

    with open(fileTwo, "r") as Second_file: 
     for index, line in enumerate(Second_file): 

      # Do stuff here aswell 

문제는 루프 "개방과 함께"두 번째에있는 파일의 시작 부분에서 시작한다는 것입니다 :이 같은 뭔가를 시도했다. 따라서 분석을 수행하는 데 걸리는 시간은 오래 걸릴 것입니다. 나는 또한 이것을 시도 :

with open(fileOne, "r") as f1, open(fileTwo, "r") as f2: 
    for index, (line_R1, line_R2) in enumerate(zip(f1, f2)): 

두 파일이 메모리에 직접로드되는 문제입니다. 각 파일에서 같은 줄이 필요합니다. 올바른 행은 다음과 같습니다.

number_line%4 == 1 

이렇게하면 2, 5, 9, 13 행이됩니다. 두 파일의 줄이 필요합니다.

더 빠른 방법과 더 메모리 효율적인 방법이 있나요?

파이썬 2에서
+0

파이썬 2, 맞습니까? –

+0

예, 저는 python2.7에서 프로그래밍 중입니다. – TheBumpper

+1

사례를 유용하게 활용할 수 있도록이 코드를 던지십시오. https://docs.python.org/2/library/difflib.html – netcoder

답변

6

, 파일을 방지하기 위해 itertools.izip()를 사용하여 메모리에로드되는 :

from itertools import izip 

with open(fileOne, "r") as f1, open(fileTwo, "r") as f2: 
    for index, (line_R1, line_R2) in enumerate(izip(f1, f2)): 

내장 zip() 기능이 실제로 자신의 전체 메모리에 모두 파일 객체를 읽어, izip()는에 라인 하나를 검색 시각.

+0

yeeey! 대단히 감사합니다! – TheBumpper

+0

그리고 파이썬 3에서는 그냥 압축 할 수 있습니다 (위의 두 번째 시도는 효과가있었습니다). – jsbueno

관련 문제