Чтение файла gzip из корзины s3

#python #amazon-web-services #amazon-s3 #gzip #boto3

#python #amazon-веб-сервисы #amazon-s3 #gzip #boto3

Вопрос:

Привет, я пытаюсь прочитать файл gzip из корзины s3, и вот моя попытка:

 s3client = boto3.client(
    's3',
    region_name='us-east-1'
)

bucketname = 'wind-obj'
file_to_read = '20190101_0000.gz'

fileobj = s3client.get_object(
    Bucket=bucketname,
    Key=file_to_read
    )

filedata = fileobj['Body'].read()
 

И теперь, чтобы открыть файл gzip, я делаю следующее:

 gzip.open(filedata,'rb')
 

но это выдает мне ошибку:

 ValueError: embedded null byte
 

Итак, я пытаюсь сначала его расшифровать:

 contents = filedata.decode('utf-8')
 

который выдает другую ошибку:

 UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
 

Я попытался декодировать его с помощью ISO-8859-1 , а затем он получает decode, но снова при открытии файла gzip выдает ту же ошибку.

Или есть какой-либо другой способ, с помощью которого я могу извлекать данные из S3, например, используя URL или что-то в этом роде?

Комментарии:

1. Какую версию Python вы используете?

2. @AnonCoward python 3.8.6

Ответ №1:

gzip.open ожидает имя файла или уже открытый файловый объект, но вы передаете ему загруженные данные напрямую. Попробуйте использовать gzip.decompress вместо:

 filedata = fileobj['Body'].read()
uncompressed = gzip.decompress(filedata)