Python не может полностью прочитать файл «warc.gz»

Для моей работы я очищаю веб-сайты и записываю их в gzipped web-архивы (с расширением «warc.gz»). Я использую Python 2.7.11 и библиотеку warc 0.2.1.

Я заметил, что для большинства файлов я не могу полностью их прочитать с помощью warc-библиотеки. Например, если файл warc.gz имеет 517 записей, я могу прочитать только около 200 из них.

После некоторых исследований выяснилось, что эта проблема возникает только с файлами gzipped. Файлы с расширением «warc» не имеют этой проблемы.

Я узнал, что у некоторых людей есть и эта проблема ( https://github.com/internetarchive/warc/issues/21 ), в то время как решение для нее не найдено.

Я предполагаю, что может быть ошибка в «gzip» в Python 2.7.11. Может быть, у кого-то есть опыт с этим, и знаете, что можно сделать по этой проблеме?

Заранее спасибо!

Пример:

Я создаю новые файлы warc.gz следующим образом:

import warc warc_path = "\\some_path\file_name.warc.gz" warc_file = warc.open(warc_path, "wb") 

Для записи записей я использую:

 record = warc.WARCRecord(payload=value, headers=headers) warc_file.write_record(record) 

Это создает идеальные файлы «warc.gz». С ними нет проблем. Все, включая «\ r \ n», являются правильными. Но проблема начинается, когда я читаю эти файлы.

Для чтения файлов я использую:

 warc_file = warc.open(warc_path, "rb") 

Для записи записей я использую:

 for record in warc_file: ... 

Проблема в том, что во время этого цикла для файла «warc.gz» обнаружены не все записи, в то время как все они найдены для файлов «warc». Работа с обоими типами файлов адресуется в самой библиотеке warc.

One Solution collect form web for “Python не может полностью прочитать файл «warc.gz»”

Похоже, что настраиваемая обработка gzip в warc.gzip2.GzipFile , разделение файлов с помощью warc.utils.FilePart и чтение в warc.warc.WARCReader прерывается в целом (тестируется с помощью python 2.7.9, 2.7.10 и 2.7.11 ). Он останавливается, когда он не получает никаких данных вместо нового заголовка .

Казалось бы, базовый stdlib gzip отлично справляется с катенатированными файлами, поэтому это тоже должно работать:

 import gzip import warc with gzip.open('my_test_file.warc.gz', mode='rb') as gzf: for record in warc.WARCFile(fileobj=gzf): print record.payload.read() 
Python - лучший язык программирования в мире.