Получение файла gzip.badgzip: Не файл gzip (b»b») при распаковке полученного сообщения

#python #amazon-web-services #compression #gzip #amazon-sqs

Вопрос:

У меня есть html-файл с именем 75842.html , и я сжимаю файл с помощью gzip, выполнив следующие действия:

 with open('75842.html', 'rb') as f:
    body_compressed=gzip.compress(f.read())
 

body_compressed является <class 'bytes'> объектом.

Я не могу отправлять байты через SQS, тело сообщения должно быть строкой. Поэтому я определяю MessageBody=str(body_compressed) при отправке файла.

При чтении сообщения на другом сервере я хотел бы распаковать и сохранить его с помощью:

 with open('75842_decompressed.html', 'w') as f:
    f.write(gzip.decompress(str.encode(body)))
 

Затем я получаю сообщение об ошибке gzip.BadGzipFile: Not a gzipped file (b"b'") . Вероятно, потому, что файл начинается с буквы «б». Однако я не уверен, как это решить. Мы очень ценим любую помощь.

Ответ №1:

Использование str() — ужасная идея. В итоге вы увеличиваете размер данных в три раза, стирая преимущества сжатия! Вы смотрели на длину до и после str() ?

Каковы ограничения на данные, которые вы можете отправлять? Если вы можете отправлять только печатные символы, вы можете использовать кодировку Base-64 или Base-85, которые расширяют данные всего на несколько десятков процентов, а не в несколько раз.