আমি সচেতন যে বোটো 2 এর মাধ্যমে স্ট্রিং হিসাবে কোনও এস 3 অবজেক্টটি খোলা সম্ভব: get_contents_as_string()
বোটো 3 তে কি সমমানের কোন কার্য রয়েছে?
আমি সচেতন যে বোটো 2 এর মাধ্যমে স্ট্রিং হিসাবে কোনও এস 3 অবজেক্টটি খোলা সম্ভব: get_contents_as_string()
বোটো 3 তে কি সমমানের কোন কার্য রয়েছে?
উত্তর:
read
বাইট ফিরে আসবে। কমপক্ষে পাইথন 3 এর জন্য, আপনি যদি কোনও স্ট্রিং ফিরে আসতে চান তবে আপনাকে ডান এনকোডিং ব্যবহার করে ডিকোড করতে হবে:
import boto3
s3 = boto3.resource('s3')
obj = s3.Object(bucket, key)
obj.get()['Body'].read().decode('utf-8')
import botocore
যেমন obj.get()['Body']
ধরনের হয়<class 'botocore.response.StreamingBody'>
.get()
একটি এডাব্লুএস ল্যাম্বডায় পাইথন ২. I ব্যবহার করার কারণে S3 থেকে অবজেক্টটি পড়তে / পার্স করতে আমার সমস্যা হয়েছিল ।
আমি জেসনকে উদাহরণটিতে যুক্ত করে দেখলাম এটি পার্সেবল হয়ে গেছে :)
import boto3
import json
s3 = boto3.client('s3')
obj = s3.get_object(Bucket=bucket, Key=key)
j = json.loads(obj['Body'].read())
দ্রষ্টব্য (পাইথন ২.7 এর জন্য): আমার অবজেক্টটি সবই এসসিআই, সুতরাং আমার দরকার নেই .decode('utf-8')
দ্রষ্টব্য: (পাইথন ৩.+++ এর জন্য): আমরা পাইথন ৩.6 এ স্থানান্তরিত করেছি এবং আবিষ্কার করেছি যে read()
এখন ফিরে আসে bytes
আপনি যদি এর থেকে স্ট্রিং পেতে চান তবে আপনাকে অবশ্যই ব্যবহার করতে হবে:
j = json.loads(obj['Body'].read().decode('utf-8'))
এটি বোটো 3 ডকুমেন্টেশনে নেই। এটি আমার পক্ষে কাজ করেছে:
object.get()["Body"].read()
অবজেক্টটি একটি এস 3 অবজেক্ট: http://boto3.readthedocs.org/en/latest/references/services/s3.html#object
get expected at least 1 arguments, got 0
। get()
"বডি" অবজেক্ট প্রোপার্টিটি সরাসরি সরান এবং অ্যাক্সেস করুন
পাইথন 3 + বোটো 3 এপিআই ব্যবহার করে।
ব্যবহারের S3.Client.download_fileobj এপিআই এবং পাইথন ফাইল মত বস্তু , এস 3 অবজেক্ট বিষয়বস্তু মেমরি উদ্ধার করা যেতে পারে।
যেহেতু পুনরুদ্ধার করা বিষয়বস্তু বাইট, তাই স্টে রূপান্তর করতে , এটি ডিকোড করা দরকার need
import io
import boto3
client = boto3.client('s3')
bytes_buffer = io.BytesIO()
client.download_fileobj(Bucket=bucket_name, Key=object_key, Fileobj=bytes_buffer)
byte_value = bytes_buffer.getvalue()
str_value = byte_value.decode() #python3, default decoding is utf-8
যদি শরীরে একটি আইও স্ট্রিংআইও থাকে তবে আপনাকে নীচের মতো করতে হবে:
object.get()['Body'].getvalue()