কম্পিউটার

AWS রিসোর্স ব্যবহার করে S3 থেকে একটি বস্তু ডাউনলোড করতে Boto3 কীভাবে ব্যবহার করবেন?


সমস্যা বিবৃতি − একটি প্রদত্ত স্থানীয় পাথ/ডিফল্ট পাথে S3 থেকে একটি বস্তু ডাউনলোড করতে পাইথনে boto3 লাইব্রেরি ব্যবহার করুন এবং বিদ্যমান ফাইলটিকে সত্য হিসেবে ওভাররাইট করুন। উদাহরণস্বরূপ, S3-এর Bucket_1/testfolder থেকে test.zip ডাউনলোড করুন।

এই সমস্যা সমাধানের জন্য অ্যাপ্রোচ/অ্যালগরিদম

ধাপ 1 − ব্যতিক্রমগুলি পরিচালনা করতে boto3 এবং botocore ব্যতিক্রমগুলি আমদানি করুন৷

ধাপ 2 - পাথলিব থেকে , ফাইলের নাম চেক করতে পাথ আমদানি করুন

ধাপ 3s3_path, localpath এবং overwrite_existing_file download_object_from_s3 ফাংশনের তিনটি প্যারামিটার

পদক্ষেপ 4৷ − s3_path যাচাই করুন AWS ফরম্যাটে s3://bucket_name/key হিসাবে পাস করা হয় . ডিফল্টরূপে, localpath =None এবং overwrite_existing_file =True . ব্যবহারকারী প্রদত্ত স্থানীয় পাথে ডাউনলোড করতে এই মানগুলিও পাস করতে পারে

ধাপ 5 - boto3 লাইব্রেরি ব্যবহার করে একটি AWS সেশন তৈরি করুন৷

ধাপ 6 - S3 এর জন্য একটি AWS রিসোর্স তৈরি করুন।

পদক্ষেপ 7 − S3 পাথকে বিভক্ত করুন এবং রুট বাকেটের নাম এবং অবজেক্ট পাথ ডাউনলোড করার জন্য আলাদা করার জন্য অপারেশন করুন৷

ধাপ 8 - ওভাররাইট_এক্সস্টিং_ফাইল কিনা তা পরীক্ষা করুন False হিসাবে সেট করুন এবং ফাইলটি ইতিমধ্যেই একটি প্রদত্ত স্থানীয় পাথে বিদ্যমান; সেক্ষেত্রে কোন অপারেশন করবেন না।

ধাপ 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 থেকে ফাইলগুলির একটি তালিকা পেতে পাইথনে Boto3 লাইব্রেরি কীভাবে ব্যবহার করবেন?

  2. AWS রিসোর্স ব্যবহার করে S3 এ একটি বস্তু আপলোড করতে পাইথনে Boto3 লাইব্রেরি কীভাবে ব্যবহার করবেন?

  3. S3 তে একটি রুট বাকেট বিদ্যমান কিনা তা নির্ধারণ করতে Boto3 এবং AWS রিসোর্স কিভাবে ব্যবহার করবেন?

  4. AWS ক্লায়েন্ট ব্যবহার করে S3 এ উপস্থিত বালতিগুলির একটি তালিকা পেতে Boto3 কীভাবে ব্যবহার করবেন?