मुझे पता है कि Boto 2 के साथ एक S3 ऑब्जेक्ट को स्ट्रिंग के रूप में खोलना संभव है: get_contents_as_string()
बोटो 3 में एक समान कार्य है?
मुझे पता है कि Boto 2 के साथ एक S3 ऑब्जेक्ट को स्ट्रिंग के रूप में खोलना संभव है: 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()
एक एडब्ल्यूएस लैम्ब्डा के अंदर पायथन 2.7 का उपयोग करने के कारण एस 3 से ऑब्जेक्ट को पढ़ने / पार्स करने की समस्या थी ।
मैंने उदाहरण के लिए json को यह दिखाने के लिए जोड़ा कि यह पार्स करने योग्य हो गया :)
import boto3
import json
s3 = boto3.client('s3')
obj = s3.get_object(Bucket=bucket, Key=key)
j = json.loads(obj['Body'].read())
नोट (अजगर 2.7 के लिए): मेरी वस्तु सभी एस्की है, इसलिए मुझे इसकी आवश्यकता नहीं है .decode('utf-8')
ध्यान दें (अजगर 3.6+ के लिए): हम अजगर 3.6 में चले गए और पता चला कि read()
अब लौटता bytes
है यदि आप इसे से एक स्ट्रिंग प्राप्त करना चाहते हैं, तो आपको इसका उपयोग करना चाहिए:
j = json.loads(obj['Body'].read().decode('utf-8'))
यह बोटो 3 प्रलेखन में नहीं है। यह मेरे लिए काम किया:
object.get()["Body"].read()
ऑब्जेक्ट s3 ऑब्जेक्ट होना: http://boto3.readthedocs.org/en/latest/reference/services/s3.html#object
get expected at least 1 arguments, got 0
। निकालें get()
और "बॉडी" ऑब्जेक्ट प्रॉपर्टी को सीधे एक्सेस करें
Python3 + boto3 API दृष्टिकोण का उपयोग करना।
S3.Client.download_fileobj API और Python फ़ाइल जैसी ऑब्जेक्ट का उपयोग करके , S3 ऑब्जेक्ट सामग्री को मेमोरी में पुनः प्राप्त किया जा सकता है।
चूंकि पुनर्प्राप्त की गई सामग्री बाइट्स है, इसलिए str में बदलने के लिए , इसे डिकोड करना होगा।
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
यदि शरीर में io.StringIO शामिल है, तो आपको नीचे की तरह करना होगा:
object.get()['Body'].getvalue()