내가 큰 GZIP 파일을 처리하기 위해 노력하고있어이 두 가지 유래 질문에서 urllib2가와 ZLIB와 기술을 사용하여 파이썬에서 인터넷에서 가져온 :파이썬 + urllib2가 : 스트리밍 조기 종료
파일의 각 청크를 읽은 후에 많은 분할 및 반복 작업이 필요한 결과 문자열에 대해 몇 가지 작업을 수행해야한다는 점을 제외하면이 방법이 유용합니다. 이것은 약간의 시간이 걸리며 코드가 다음 req.read()
을 수행 할 때 아무것도 반환하지 않고 프로그램이 끝나고 첫 번째 청크 만 읽습니다.
다른 작업을 주석 처리하면 전체 파일을 읽고 압축을 해제합니다. 코드 :
d = zlib.decompressobj(16+zlib.MAX_WBITS)
CHUNK = 16 * 1024
url = 'http://foo.bar/foo.gz'
req = urllib2.urlopen(url)
while True:
chunk = req.read(CHUNK)
if not chunk:
print "DONE"
break
s = d.decompress(chunk)
# ...
# lots of operations with s
# which might take a while
# but not more than 1-2 seconds
아이디어가 있으십니까?
편집 : 이것은 urllib2/zlib 처리가 아닌 프로그램의 다른 곳에서 버그로 밝혀졌습니다. 도와 주신 모든 분들께 감사드립니다. 대형 gzip 파일을 처리해야하는 경우 위의 코드에서 사용 된 패턴을 권장 할 수 있습니다.
's'에 긴 연산을 넣을 때도 똑같은 일이 발생합니까? – chown
예, 결과는 같습니다. – beerbajay
다른 작업을 time.sleep (2)로 바꾸면 어떻게됩니까? –