Я пытаюсь обработать большой gzip-файл, извлеченный из интернета, в python, используя urllib2 и zlib и методы из этих двух вопросов stackoverflow:
Это прекрасно работает, за исключением того, что после чтения каждого куска файла мне нужновыполнить некоторые операции с результирующей строкой, которые требуют большого количества разбиений и повторений.Это занимает некоторое время, и когда код переходит к следующему 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.