Di boto 3, metode 'Key.set_contents_from_' diganti dengan
Sebagai contoh:
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')
Sebagai alternatif, data biner dapat berasal dari membaca file, seperti yang dijelaskan dalam dokumen resmi yang membandingkan boto 2 dan boto 3 :
Menyimpan Data
Menyimpan data dari file, aliran, atau string itu mudah:
# 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()
saya berakhir dengan sebuah objek dengan nolcontent-length
. Bagi sayaput()
hanya menerima data string, tetapiput(str(binarydata))
tampaknya memiliki semacam masalah pengkodean. Saya berakhir dengan objek kira-kira 3 kali ukuran data asli, yang membuatnya tidak berguna bagi saya.boto3 juga memiliki metode untuk mengunggah file secara langsung:
http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Bucket.upload_file
sumber
s3.Bucket(...).upload_fileobj()
metode ini.Anda tidak lagi harus mengonversi konten ke biner sebelum menulis ke file di S3. Contoh berikut membuat file teks baru (disebut newfile.txt) di bucket S3 dengan konten string:
sumber
prefix
dalam kasus ini? Artinya, bagaimana jika Anda ingin menyimpan file tersebutmy-bucket-name/subfolder/
?Inilah trik bagus untuk membaca JSON dari s3:
Sekarang Anda dapat menggunakan
json.load_s3
danjson.dump_s3
dengan API yang sama denganload
dandump
sumber
...["Body"].read().decode('utf-8')
.Versi yang lebih bersih dan ringkas yang saya gunakan untuk mengunggah file dengan cepat ke bucket dan sub-folder S3 tertentu-
Catatan : Anda harus SELALU meletakkan kredensial AWS Anda (
aws_access_key_id
danaws_secret_access_key
) di file terpisah, misalnya-~/.aws/credentials
sumber
~
C:\Users\username\.aws\credentials
perlu menyebutkan smart-open yang digunakan
boto3
sebagai back-end.smart-open
adalah pengganti drop-in untuk pythonopen
yang dapat membuka file daris3
, sertaftp
,http
dan banyak protokol lainnya.sebagai contoh
Kredensial aws dimuat melalui kredensial boto3 , biasanya file di
~/.aws/
dir atau variabel lingkungan.sumber
Anda dapat menggunakan kode di bawah ini untuk menulis, misalnya gambar ke S3 pada tahun 2019. Untuk dapat terhubung ke S3 Anda harus menginstal AWS CLI menggunakan perintah
pip install awscli
, lalu masukkan beberapa kredensial menggunakan perintahaws configure
:sumber