W boto 3 metody „Key.set_contents_from_” zostały zastąpione przez
Na przykład:
import boto3
some_binary_data = b'Here we have some data'
more_binary_data = b'Here we have some more data'
# Method 1: Object.put()
s3 = boto3.resource('s3')
object = s3.Object('my_bucket_name', 'my/key/including/filename.txt')
object.put(Body=some_binary_data)
# Method 2: Client.put_object()
client = boto3.client('s3')
client.put_object(Body=more_binary_data, Bucket='my_bucket_name', Key='my/key/including/anotherfilename.txt')
Alternatywnie, dane binarne mogą pochodzić z odczytu pliku, jak opisano w oficjalnych dokumentach porównujących boto 2 i boto 3 :
Przechowywanie danych
Przechowywanie danych z pliku, strumienia lub ciągu znaków jest łatwe:
# Boto 2.x
from boto.s3.key import Key
key = Key('hello.txt')
key.set_contents_from_file('/tmp/hello.txt')
# Boto 3
s3.Object('mybucket', 'hello.txt').put(Body=open('/tmp/hello.txt', 'rb'))
s3.Object().put()
, otrzymuję obiekt z zeremcontent-length
. U mnieput()
akceptuje tylko dane ciągów, aleput(str(binarydata))
wydaje się, że ma jakieś problemy z kodowaniem. W rezultacie otrzymuję obiekt mniej więcej 3 razy większy od oryginalnych danych, co czyni go bezużytecznym dla mnie.boto3 ma również metodę bezpośredniego przesyłania pliku:
http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Bucket.upload_file
źródło
s3.Bucket(...).upload_fileobj()
zamiast tego użyć metody.Nie musisz już konwertować zawartości do formatu binarnego przed zapisaniem do pliku w S3. Poniższy przykład tworzy nowy plik tekstowy (o nazwie newfile.txt) w zasobniku S3 z zawartością ciągu:
źródło
prefix
w tym przypadku? To znaczy, co jeśli chcesz przechowywać plik wmy-bucket-name/subfolder/
?Oto fajna sztuczka do czytania JSON z s3:
Teraz możesz używać
json.load_s3
ijson.dump_s3
z tym samym interfejsem API, coload
idump
źródło
...["Body"].read().decode('utf-8')
.Czystsza i zwięzła wersja, której używam do przesyłania plików w locie do danego wiadra S3 i podfolderu
Uwaga : ZAWSZE powinieneś umieszczać swoje dane uwierzytelniające AWS (
aws_access_key_id
iaws_secret_access_key
) w oddzielnym pliku, na przykład:~/.aws/credentials
źródło
~
C:\Users\username\.aws\credentials
warto wspomnieć o smart-open, który używa
boto3
jako zaplecza.smart-open
Jest to zamiennik dla Pythonaopen
, który może otwierać pliki zs3
, jak równieżftp
,http
i wiele innych protokołów.na przykład
Poświadczenia aws są ładowane za pośrednictwem poświadczeń boto3 , zwykle pliku w katalogu
~/.aws/
lub zmiennej środowiskowej.źródło
Możesz użyć poniższego kodu do napisania, na przykład obrazu do S3 w 2019 roku. Aby móc połączyć się z S3 będziesz musiał zainstalować AWS CLI za pomocą polecenia
pip install awscli
, a następnie wprowadzić kilka poświadczeń za pomocą poleceniaaws configure
:źródło