#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)