python - B33 का उपयोग करके किसी S3 ऑब्जेक्ट में फ़ाइल या डेटा कैसे लिखें
amazon-web-services amazon-s3 (4)
बोटो 2 में, आप इन विधियों का उपयोग करके S3 ऑब्जेक्ट को लिख सकते हैं:
- Key.set_contents_from_string()
- Key.set_contents_from_file()
- Key.set_contents_from_filename()
- Key.set_contents_from_stream()
वहाँ एक बोटो 3 बराबर है? S3 पर संग्रहीत किसी वस्तु को डेटा बचाने के लिए boto3 विधि क्या है?
boto3 में सीधे फ़ाइल अपलोड करने की एक विधि भी है:
s3.Bucket('bucketname').upload_file('/local/file/here.txt','folder/sub/path/to/s3key')
http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Bucket.upload_file
आपको अब S3 में फ़ाइल में लिखने से पहले सामग्री को बाइनरी में बदलना नहीं है। निम्नलिखित उदाहरण स्ट्रिंग सामग्री के साथ S3 बाल्टी में एक नई टेक्स्ट फ़ाइल (जिसे newfile.txt कहा जाता है) बनाता है:
import boto3
s3 = boto3.resource(
's3',
region_name='us-east-1',
aws_access_key_id=KEY_ID,
aws_secret_access_key=ACCESS_KEY
)
content="String content to write to a new S3 file"
s3.Object('my-bucket-name', 'newfile.txt').put(Body=content)
बोटो 3 में, 'Key.set_contents_from_' विधियों को बदल दिया गया था
उदाहरण के लिए:
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')
वैकल्पिक रूप से, द्विआधारी डेटा एक फ़ाइल को पढ़ने से आ सकता है, जैसा कि आधिकारिक डॉक्स में बोटो 2 और बोटो 3 की तुलना में वर्णित है:
आकड़ो का भंडारण किया जा रहा हैं
फ़ाइल, स्ट्रीम, या स्ट्रिंग से डेटा संग्रहीत करना आसान है:
# 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 से JSON पढ़ने के लिए एक अच्छी चाल है:
import json, boto3
s3 = boto3.resource("s3").Bucket("bucket")
json.load_s3 = lambda f: json.load(s3.Object(key=f).get()["Body"])
json.dump_s3 = lambda obj, f: s3.Object(key=f).put(Body=json.dumps(obj))
अब आप
json.load_s3
और
json.dump_s3
को
load
और
dump
के समान API के साथ उपयोग कर सकते हैं
data = {"test":0}
json.dump_s3(data, "key") # saves json to s3://bucket/key
data = json.load_s3("key") # read json from s3://bucket/key