Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Python

AWS संसाधन का उपयोग करके S3 में किसी ऑब्जेक्ट को अपलोड करने के लिए Python में Boto3 लाइब्रेरी का उपयोग कैसे करें?

समस्या का विवरण - किसी ऑब्जेक्ट को S3 में अपलोड करने के लिए Python में Boto3 लाइब्रेरी का उपयोग करें। उदाहरण के लिए, test.zip को S3 के बकेट_1 में कैसे अपलोड करें।

इस समस्या को हल करने के लिए दृष्टिकोण/एल्गोरिदम

चरण 1 - अपवादों को संभालने के लिए boto3 और botocore अपवाद आयात करें।

चरण 2 - पाथलिब . से , पथ से फ़ाइल नाम पुनर्प्राप्त करने के लिए PurePosixPath आयात करें

चरण 3 - s3_path और फ़ाइलपथ फ़ंक्शन में दो पैरामीटर हैं upload_object_into_s3

चरण 4 - s3_path की पुष्टि करें एडब्ल्यूएस प्रारूप में s3://bucket_name/key . के रूप में पास किया गया है और फ़ाइलपथ स्थानीय पथ के रूप में C://उपयोगकर्ता/फ़ाइल नाम

चरण 5 - boto3 लाइब्रेरी का उपयोग करके AWS सत्र बनाएं।

चरण 6 - S3 के लिए AWS संसाधन बनाएं।

चरण 7 - S3 पथ को विभाजित करें और रूट बकेट नाम और कुंजी पथ को अलग करने के लिए संचालन करें

चरण 8 - पूर्ण फ़ाइलपथ के लिए फ़ाइल नाम प्राप्त करें और S3 कुंजी पथ में जोड़ें।

चरण 9 - अब फ़ंक्शन का उपयोग करें upload_fileobj स्थानीय फ़ाइल को S3 में अपलोड करने के लिए।

चरण 10 - फ़ंक्शन का उपयोग करें wait_until_exists ऑपरेशन समाप्त होने तक प्रतीक्षा करने के लिए।

चरण 11 - फ़ाइल अपलोड की गई है या नहीं, यह सत्यापित करने के लिए प्रतिक्रिया कोड के आधार पर अपवाद को संभालें।

चरण 12 - फ़ाइल अपलोड करते समय कुछ गलत होने पर सामान्य अपवाद को संभालें

उदाहरण

फ़ाइल को AWS S3 में अपलोड करने के लिए निम्न कोड का उपयोग करें -

import boto3
from botocore.exceptions import ClientError
from pathlib import PurePosixPath

def upload_object_into_s3(s3_path, filepath):

   if 's3://' in filepath:
      print('SourcePath is not a valid path.' + filepath)
      raise Exception('SourcePath is not a valid path.')
   elif s3_path.find('s3://') == -1:
      print('DestinationPath is not a s3 path.' + s3_path)
      raise Exception('DestinationPath is not a valid path.')
   session = boto3.session.Session()
   s3_resource = session.resource('s3')
   tokens = s3_path.split('/')
   target_key = ""
   if len(tokens) > 3:
      for tokn in range(3, len(tokens)):
         if tokn == 3:
            target_key += tokens[tokn]
         else:
            target_key += "/" + tokens[tokn]
   target_bucket_name = tokens[2]

   file_name = PurePosixPath(filepath).name
   if target_key != '':
      target_key.strip()
      key_path = target_key + "/" + file_name
   else:
      key_path = file_name
   print(("key_path: " + key_path, 'target_bucket: ' + target_bucket_name))

   try:
      # uploading Entity from local path
      with open(filepath, "rb") as file:
      s3_resource.meta.client.upload_fileobj(file, target_bucket_name, key_path)
      try:
         s3_resource.Object(target_bucket_name, key_path).wait_until_exists()
         file.close()
      except ClientError as error:
         error_code = int(error.response['Error']['Code'])
         if error_code == 412 or error_code == 304:
            print("Object didn't Upload Successfully ", target_bucket_name)
            raise error
      return "Object Uploaded Successfully"
   except Exception as error:
      print("Error in upload object function of s3 helper: " + error.__str__())
      raise error
print(upload_object_into_s3('s3://Bucket_1/testfolder', 'c://test.zip'))

आउटपुट

key_path:/testfolder/test.zip, target_bucket: Bucket_1
Object Uploaded Successfully

  1. मैं कैसे जांचूं कि पाइथन का उपयोग कर कोई फ़ाइल मौजूद है या नहीं?

    कंप्यूटर में एक निश्चित फ़ाइल की उपस्थिति को पायथन कोड का उपयोग करके दो तरीकों से सत्यापित किया जा सकता है। एक तरीका है os.path मॉड्यूल के isfile() फ़ंक्शन का उपयोग करना। यदि निर्दिष्ट पथ पर फ़ाइल मौजूद है, तो फ़ंक्शन सही है, अन्यथा यह गलत है। >>> import os >>> os.path.isfile(d:\\

  1. पायथन का उपयोग करके फ़ाइल एक्सटेंशन कैसे निकालें?

    आप os.path.slitext पद्धति का उपयोग करके फ़ाइल नाम स्ट्रिंग का फ़ाइल एक्सटेंशन निकाल सकते हैं। यह पथनाम पथ को एक जोड़ी (रूट, एक्सट) में विभाजित करता है जैसे कि रूट + एक्सट ==पथ, और एक्सटी खाली है या एक अवधि से शुरू होता है और इसमें अधिकतम एक अवधि होती है। उदाहरण, import os file_name = 'my_file.tx

  1. पाइथन का उपयोग करके पुनरावर्ती रूप से एकाधिक फ़ाइलों का नाम कैसे बदलें?

    आप निर्देशिका के माध्यम से पुनरावर्ती रूप से चलने के लिए os.walk का उपयोग कर सकते हैं और बाद में फ़ाइलों का नाम बदलने के लिए os.rename का उपयोग कर सकते हैं। उदाहरण import os def replace(folder_path, old, new):     for path, subdirs, files in os.walk(folder_path):