aby ta odpowiedź zadziałała, musiałem zrobić to, import botocoreco obj.get()['Body']jest typu<class 'botocore.response.StreamingBody'>
Tzunghsing David Wong
1
@TzunghsingDavidWong nie powinieneś musieć importować pakietu w celu wywołania metod na istniejącym obiekcie, prawda? Czy było to konieczne tylko podczas eksperymentowania?
Ken Williams
1
jaka jest wartość klucza w obj = s3.Object (bucket, key) ** bucket is buckername ?? a kluczem jest nazwa pliku ??? *** proszę poprawić mnie, jeśli się mylę ...
Amaresh Jana
1
@Amaresh tak, bucket = nazwa zasobnika i klucz = nazwa pliku
Tipster
jeśli klucz jest w formacie pdf, czy działa? lub zasugeruj inny przydatny sposób, próbowałem zaimportować tekst textract text = textract.process ('path / to / a.pdf', method = 'pdfminer') Spowoduje to błąd importu
Arun Kumar
96
Miałem problem z odczytaniem / parsowaniem obiektu z S3 z powodu .get()używania Pythona 2.7 wewnątrz AWS Lambda.
Dodałem json do przykładu, aby pokazać, że stał się parsowalny :)
wydaje się, że teraz get expected at least 1 arguments, got 0. Usuń get()i
uzyskaj
13
Python3 + Korzystanie z podejścia boto3 API.
Korzystając z interfejsu API S3.Client.download_fileobj i obiektu przypominającego plik w języku Python , zawartość obiektu S3 można pobrać do pamięci.
Ponieważ pobrana treść to bajty, aby przekonwertować ją na str , należy ją zdekodować.
Odpowiedzi:
read
zwróci bajty. Przynajmniej dla Pythona 3, jeśli chcesz zwrócić ciąg, musisz zdekodować przy użyciu odpowiedniego kodowania:źródło
import botocore
coobj.get()['Body']
jest typu<class 'botocore.response.StreamingBody'>
Miałem problem z odczytaniem / parsowaniem obiektu z S3 z powodu
.get()
używania Pythona 2.7 wewnątrz AWS Lambda.Dodałem json do przykładu, aby pokazać, że stał się parsowalny :)
UWAGA (dla Pythona 2.7): Mój obiekt to cały ascii, więc nie potrzebuję
.decode('utf-8')
UWAGA (dla Pythona 3.6+): Przeszliśmy do Pythona 3.6 i odkryliśmy, że
read()
teraz zwraca,bytes
więc jeśli chcesz uzyskać z niego ciąg, musisz użyć:j = json.loads(obj['Body'].read().decode('utf-8'))
źródło
Tego nie ma w dokumentacji boto3. To zadziałało dla mnie:
obiekt będący obiektem s3: http://boto3.readthedocs.org/en/latest/reference/services/s3.html#object
źródło
get expected at least 1 arguments, got 0
. Usuńget()
iPython3 + Korzystanie z podejścia boto3 API.
Korzystając z interfejsu API S3.Client.download_fileobj i obiektu przypominającego plik w języku Python , zawartość obiektu S3 można pobrać do pamięci.
Ponieważ pobrana treść to bajty, aby przekonwertować ją na str , należy ją zdekodować.
źródło
Jeśli body zawiera io.StringIO, musisz wykonać poniższe czynności:
źródło