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

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

समस्या का विवरण - मौजूदा फ़ाइल को सही के रूप में अधिलेखित करने के साथ किसी दिए गए स्थानीय पथ/डिफ़ॉल्ट पथ पर S3 से किसी ऑब्जेक्ट को डाउनलोड करने के लिए पायथन में boto3 लाइब्रेरी का उपयोग करें। उदाहरण के लिए, S3 के बकेट_1/testfolder से test.zip डाउनलोड करें।

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

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

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

चरण 3 - s3_path, localpath और ओवरराइट_मौजूदा_फ़ाइल फ़ंक्शन में तीन पैरामीटर हैं download_object_from_s3

चरण 4 - s3_path की पुष्टि करें एडब्ल्यूएस प्रारूप में s3://bucket_name/key . के रूप में पास किया गया है . डिफ़ॉल्ट रूप से, लोकलपाथ =कोई नहीं और ओवरराइट_मौजूदा_फ़ाइल =सही . उपयोगकर्ता इन मानों को किसी दिए गए स्थानीय पथ में डाउनलोड करने के लिए भी पास कर सकता है

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

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

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

चरण 8 - जांचें कि क्या ओवरराइट_मौजूदा_फ़ाइल गलत के रूप में सेट करें और फ़ाइल किसी दिए गए स्थानीय पथ में पहले से मौजूद है; ऐसे में कोई भी ऑपरेशन न करें।

चरण 9 - अन्यथा (यदि इनमें से कोई भी शर्त सत्य नहीं है), वस्तु को डाउनलोड करें। यदि लोकलपथ दिया गया है, तो वहां डाउनलोड करें; अन्यथा डिफ़ॉल्ट पथ में डाउनलोड करें।

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

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

उदाहरण

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

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

def download_object_from_s3(s3path, localPath=None,
overwrite_existing_file=True):

   if 's3://' not in s3path:
      print('Given path is not a valid s3 path.')
      raise Exception('Given path is not a valid s3 path.')

   session = boto3.session.Session()
   s3_resource = session.resource('s3')

   s3_tokens = s3path.split('/')
   bucket_name = s3_tokens[2]
   object_path = ""
   filename = s3_tokens[len(s3_tokens) - 1]
   print('Filename: ' + filename)

   if len(s3_tokens) > 4:
      for tokn in range(3, len(s3_tokens) - 1):
         object_path += s3_tokens[tokn] + "/"
      object_path += filename
   else:
      object_path += filename
   print('object: ' + object_path)
   try:
      if not overwrite_existing_file and Path.is_file(filename):
         pass
      else:
         if localPath is None:
            s3_resource.meta.client.download_file(bucket_name, object_path, filename)
         else:
            s3_resource.meta.client.download_file(bucket_name, object_path, localPath + '/' + filename)
      print('Filename: ' + filename)
      return filename
   except ClientError as error:
      if error.response['Error']['Code'] == '404':
         print(s3path + " File not found: ")
         raise Exception(s3path + " File not found: ")
   except Exception as error:
      print("Unexpected error in download_object function of s3 helper: " + error.__str__())
      raise Exception("Unexpected error in download_object function of s3 helper: " + error.__str__())

#Download into default localpath
print(download_object_from_s3("s3://Bucket_1/testfolder/test.zip"))
#Download into given path
print(download_object_from_s3("s3://Bucket_1/testfolder/test.zip","C://AWS"))
#File doesn’t exist in S3
print(download_object_from_s3("s3://Bucket_1/testfolder/abc.zip"))

आउटपुट

#Download into default localpath
Filename: test.zip
object: testfolder/test.zip
Filename: test.zip

#Download into given path
Filename: test.zip
object: testfolder/test.zip
Filename: test.zip

#File doesn’t exist in S3
Filename: abc.zip
object: testfolder/abc.zip
s3://Bucket_1/testfolder/abc.zip File not found:
botocore.exceptions.ClientError: An error occurred (404) when calling
the HeadObject operation: Not Found

नोट: डाउनलोड करने का डिफ़ॉल्ट पथ वह निर्देशिका है जहां यह फ़ंक्शन लिखा जाता है। यदि स्थानीय पथ प्रदान नहीं किया गया है, तो उसी निर्देशिका में फ़ाइल डाउनलोड की जाएगी।

उदाहरण के लिए, यदि यह फ़ंक्शन S3_class में लिखा गया है और यह वर्ग C://AWS/src/S3_class पर मौजूद है, तो फ़ाइल test.zip C://AWS/src/test.zip में डाउनलोड की जाएगी


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

    समस्या का विवरण - किसी ऑब्जेक्ट को S3 में अपलोड करने के लिए Python में Boto3 लाइब्रेरी का उपयोग करें। उदाहरण के लिए, test.zip को S3 के बकेट_1 में कैसे अपलोड करें। इस समस्या को हल करने के लिए दृष्टिकोण/एल्गोरिदम चरण 1 - अपवादों को संभालने के लिए boto3 और botocore अपवाद आयात करें। चरण 2 - पाथलिब . स

  1. S3 में रूट बकेट मौजूद है या नहीं यह निर्धारित करने के लिए Boto3 और AWS संसाधन का उपयोग कैसे करें?

    समस्या का विवरण - यह निर्धारित करने के लिए कि S3 में रूट बकेट मौजूद है या नहीं, Python में Boto3 लाइब्रेरी का उपयोग करें। उदाहरण - बकेट_1 S3 में मौजूद है या नहीं। इस समस्या को हल करने के लिए दृष्टिकोण/एल्गोरिदम चरण 1 - अपवादों को संभालने के लिए boto3 और botocore अपवाद आयात करें। चरण 2 - boto3 लाइ

  1. AWS क्लाइंट का उपयोग करके S3 में मौजूद बकेट की सूची प्राप्त करने के लिए Boto3 का उपयोग कैसे करें?

    समस्या का विवरण − AWS में मौजूद सभी बकेट की सूची प्राप्त करने के लिए Python में Boto3 लाइब्रेरी का उपयोग करें उदाहरण - बकेट का नाम प्राप्त करें जैसे - BUCKET_1, BUCKET2, BUCKET_3 इस समस्या को हल करने के लिए दृष्टिकोण/एल्गोरिदम चरण 1 - अपवादों को संभालने के लिए boto3 और botocore अपवाद आयात करें। च