Я знаю, что с Boto 2 можно открыть объект S3 в виде строки с: get_contents_as_string()
Есть ли эквивалентная функция в boto3?
read
вернет байты. По крайней мере, для Python 3, если вы хотите вернуть строку, вы должны декодировать, используя правильную кодировку:
import boto3
s3 = boto3.resource('s3')
obj = s3.Object(bucket, key)
obj.get()['Body'].read().decode('utf-8')
import botocore
как-тоobj.get()['Body']
типа<class 'botocore.response.StreamingBody'>
У меня была проблема с чтением / анализом объекта из S3 из-за
.get()
использования Python 2.7 внутри AWS Lambda.Я добавил json в пример, чтобы показать, что он стал доступным для анализа :)
ПРИМЕЧАНИЕ (для python 2.7): все мои объекты ascii, поэтому мне не нужно
.decode('utf-8')
ПРИМЕЧАНИЕ (для python 3.6+): мы перешли на python 3.6 и обнаружили, что
read()
теперь он возвращается,bytes
поэтому, если вы хотите извлечь из него строку, вы должны использовать:j = json.loads(obj['Body'].read().decode('utf-8'))
источник
Этого нет в документации по boto3. Это сработало для меня:
объект, являющийся объектом s3: http://boto3.readthedocs.org/en/latest/reference/services/s3.html#object
источник
get expected at least 1 arguments, got 0
. Удалитеget()
и получите доступ к свойству объекта «Тело» напрямуюPython3 + Использование подхода boto3 API.
Используя API S3.Client.download_fileobj и файлоподобный объект Python , содержимое объекта S3 можно извлечь в память.
Поскольку извлекаемое содержимое является байтами, для преобразования в str его необходимо декодировать.
источник
Если тело содержит io.StringIO, вы должны сделать, как показано ниже:
источник