Um diese Antwort zum import botocoreobj.get()['Body']<class 'botocore.response.StreamingBody'>
Laufen
1
@TzunghsingDavidWong Sie sollten kein Paket importieren müssen, um Methoden für ein vorhandenes Objekt aufzurufen, oder? War das vielleicht nur beim Experimentieren nötig?
Ken Williams
1
Was ist der Wert des Schlüssels im Objekt obj = s3.Object (Bucket, Key) ** Bucket ist Buckername? und Schlüssel ist der Dateiname ??? *** Bitte korrigieren Sie mich, wenn ich falsch
liege
1
@Amaresh ja, Bucket = Bucket Name und Schlüssel = Dateiname
Tipster
Wenn ein Schlüssel im PDF-Format vorliegt, funktioniert er dann? oder schlagen Sie bitte einen anderen nützlichen Weg vor, ich habe versucht, textract text = textract.process ('path / to / a.pdf', method = 'pdfminer') zu importieren. Es wird Importfehler säen
Arun Kumar
96
Ich hatte ein Problem beim Lesen / Parsen des Objekts aus S3, da .get()Python 2.7 in einem AWS Lambda verwendet wurde.
Ich habe dem Beispiel json hinzugefügt, um zu zeigen, dass es analysierbar wurde :)
HINWEIS (für Python 2.7): Mein Objekt ist alles ASCII, daher brauche ich es nicht .decode('utf-8')
HINWEIS (für Python 3.6+): Wir sind zu Python 3.6 übergegangen und haben festgestellt, dass dies read()jetzt zurückkehrt. bytesWenn Sie also eine Zeichenfolge daraus ziehen möchten, müssen Sie Folgendes verwenden:
Antworten:
read
gibt Bytes zurück. Zumindest für Python 3 müssen Sie, wenn Sie einen String zurückgeben möchten, mit der richtigen Codierung dekodieren:quelle
import botocore
obj.get()['Body']
<class 'botocore.response.StreamingBody'>
Ich hatte ein Problem beim Lesen / Parsen des Objekts aus S3, da
.get()
Python 2.7 in einem AWS Lambda verwendet wurde.Ich habe dem Beispiel json hinzugefügt, um zu zeigen, dass es analysierbar wurde :)
HINWEIS (für Python 2.7): Mein Objekt ist alles ASCII, daher brauche ich es nicht
.decode('utf-8')
HINWEIS (für Python 3.6+): Wir sind zu Python 3.6 übergegangen und haben festgestellt, dass dies
read()
jetzt zurückkehrt.bytes
Wenn Sie also eine Zeichenfolge daraus ziehen möchten, müssen Sie Folgendes verwenden:j = json.loads(obj['Body'].read().decode('utf-8'))
quelle
Dies ist nicht in der boto3-Dokumentation enthalten. Das hat bei mir funktioniert:
Objekt ist ein S3-Objekt: http://boto3.readthedocs.org/en/latest/reference/services/s3.html#object
quelle
get expected at least 1 arguments, got 0
. Entfernen Sie dieget()
und greifen Sie direkt auf diePython3 + Verwenden des Boto3-API-Ansatzes.
Durch die Verwendung von S3.Client.download_fileobj API und Python - Datei-ähnliches Objekt , S3 Objektinhalt kann auf dem Speicher abgerufen werden.
Da es sich bei dem abgerufenen Inhalt um Bytes handelt, muss er zum Konvertieren in str dekodiert werden.
quelle
Wenn body ein io.StringIO enthält, müssen Sie wie folgt vorgehen:
quelle