Формат gzip определяет поле с именем ISIZE
, которое:
Содержит размер исходных (несжатых) входных данных по модулю 2 ^ 32.
В gzip.py , который, как я полагаю, используется вами для поддержки gzip, есть метод с именем _read_eof
, определенный следующим образом:
def _read_eof(self):
# We've read to the end of the file, so we have to rewind in order
# to reread the 8 bytes containing the CRC and the file size.
# We check the that the computed CRC and size of the
# uncompressed data matches the stored values. Note that the size
# stored is the true file size mod 2**32.
self.fileobj.seek(-8, 1)
crc32 = read32(self.fileobj)
isize = U32(read32(self.fileobj)) # may exceed 2GB
if U32(crc32) != U32(self.crc):
raise IOError, "CRC check failed"
elif isize != LOWU32(self.size):
raise IOError, "Incorrect length of data produced"
Там вы можете видеть, что поле ISIZE
читается, но только для того, чтобы сравнить его с self.size
для обнаружения ошибок. Тогда это должно означать, что GzipFile.size
хранит фактический несжатый размер. Тем не менее, я думаю, что это не публично, поэтому вам, возможно, придется взломать его, чтобы разоблачить. Не уверен, извините.
Я только что посмотрел все это прямо сейчас, и я не пробовал, поэтому я могу ошибаться. Я надеюсь, что это вам пригодится. Извините, если я неправильно понял ваш вопрос.