para obter essa resposta para o trabalho, eu tive que import botocorecomo obj.get()['Body']é do tipo<class 'botocore.response.StreamingBody'>
Tzunghsing David Wong
1
@TzunghsingDavidWong, você não precisa importar um pacote para chamar métodos em um objeto existente, certo? Talvez isso fosse apenas necessário durante as experiências?
Ken Williams
1
qual é o valor da chave no obj = s3.Object (bucket, key) ** bucket is buckername ?? ea chave é o nome do arquivo ??? *** por favor, corrija-me se estou errado ...
Amaresh Jana
1
@Amaresh sim, bucket = nome e chave do bucket = nome do arquivo
Tipster
se uma chave está no formato pdf, funciona? ou por favor sugerir uma outra maneira útil, eu tentei importação textract text = textract.process ( 'path / to / a.pdf', method = 'pdfminer') Ele vai semear erro de importação
Arun Kumar
96
Ocorreu um problema ao ler / analisar o objeto do S3 devido ao .get()uso do Python 2.7 dentro de um AWS Lambda.
Eu adicionei json ao exemplo para mostrar que se tornou parsable :)
Respostas:
read
retornará bytes. Pelo menos para Python 3, se você quiser retornar uma string, precisará decodificar usando a codificação correta:fonte
import botocore
comoobj.get()['Body']
é do tipo<class 'botocore.response.StreamingBody'>
Ocorreu um problema ao ler / analisar o objeto do S3 devido ao
.get()
uso do Python 2.7 dentro de um AWS Lambda.Eu adicionei json ao exemplo para mostrar que se tornou parsable :)
NOTA (para python 2.7): Meu objeto é todo ascii, então não preciso
.decode('utf-8')
OBSERVAÇÃO (para python 3.6+): passamos para o python 3.6 e descobrimos que
read()
agora retorna.bytes
Se você deseja obter uma string, deve usar:j = json.loads(obj['Body'].read().decode('utf-8'))
fonte
Isso não está na documentação do boto3. Isso funcionou para mim:
objeto sendo um objeto s3: http://boto3.readthedocs.org/en/latest/reference/services/s3.html#object
fonte
get expected at least 1 arguments, got 0
. Removaget()
e acesse a propriedade de objeto "Corpo" diretamentePython3 + Usando a abordagem da API boto3.
Usando a API S3.Client.download_fileobj e o objeto semelhante a arquivo Python , o conteúdo do objeto S3 pode ser recuperado na memória.
Como o conteúdo recuperado é de bytes, para converter em str , ele precisa ser decodificado.
fonte
Se body contiver um io.StringIO, você deverá fazer o seguinte:
fonte