কম্পিউটার টিউটোরিয়াল

Boto3 লাইব্রেরি এবং AWS Resource ব্যবহার করে শেষ পরিবর্তনের তারিখের ভিত্তিতে S3 থেকে ফাইলগুলির তালিকা পেতে পদ্ধতি


সমস্যা বিবরণ − Python-এ boto3 লাইব্রেরি ব্যবহার করে S3 থেকে ফাইলগুলির তালিকা আনা যেগুলো একটি নির্দিষ্ট তারিখের পরে পরিবর্তিত হয়েছে।

উদাহরণ − Bucket_1/testfolder থেকে test.zip তালিকাভুক্ত করা যদি এটি 2021-01-21 13:19:56.986445+00:00-এর পরে পরিবর্তিত হয়।

এই সমস্যাটি সমাধানের পদ্ধতি/এলগরিদম

ধাপ ১ − boto3 এবং botocore.exceptions ইমপোর্ট করুন এক্সেপশন হ্যান্ডলিং-এর জন্য।

ধাপ ২ − s3_path এবং last_modified_timestamp হলো list_all_objects_based_on_last_modified ফাংশনের দুটি প্যারামিটার। "last_modified_timestamp" ফরম্যাটে থাকবে "2021-01-22 13:19:56.986445+00:00"। ডিফল্টভাবে boto3 UTC টাইমজোন বুঝতে পারে ভৌগলিক অবস্থানের নির্বিশেষে।

ধাপ ৩ − যাচাই করুন যে s3_path AWS ফরম্যাটে s3://bucket_name/key হিসেবে পাস করা হয়েছে।

ধাপ ৪ − boto3 লাইব্রেরি ব্যবহার করে একটি AWS সেশন তৈরি করুন।

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

ধাপ ৬ − এখন দেওয়া প্রিফিক্সের সব অবজেক্ট তালিকাভুক্ত করতে list_objects ফাংশনটি ব্যবহার করুন এবং এক্সেপশন হ্যান্ডেল করুন।

ধাপ ৭ − উপরের ফাংশনের ফলাফল একটি ডিকশনারি এবং এতে 'Contents' কী-এ সব ফাইল-লেভেল তথ্য থাকে। এখন বাকেট-লেভেল বিবরণ একটি অবজেক্টে বের করুন।

ধাপ ৮ − এখন, অবজেক্টটিও একটি ডিকশনারি যাতে ফাইলের সব বিবরণ থাকে। এখন প্রতিটি ফাইলের LastModified বিবরণ বের করুন এবং প্রদত্ত তারিখ টাইমস্ট্যাম্পের সাথে তুলনা করুন।

ধাপ ৯ − যদি LastModified প্রদত্ত টাইমস্ট্যাম্প থেকে বড় হয়, তবে পুরো ফাইলের নাম সংরক্ষণ করুন, অন্যথায় উপেক্ষা করুন।

ধাপ ১০ − প্রদত্ত তারিখ টাইমস্ট্যাম্পের পরে পরিবর্তিত ফাইলগুলির তালিকা রিটার্ন করুন।

উদাহরণ

শেষ পরিবর্তনের তারিখ টাইমস্ট্যাম্পের ভিত্তিতে AWS S3 থেকে ফাইলগুলির তালিকা পেতে নিচের কোডটি ব্যবহার করুন −

import boto3
from botocore.exceptions import ClientError

def list_all_objects_based_on_last_modified(s3_files_path, last_modified_timestamp):
    if 's3://' not in s3_files_path:
        raise Exception('Given path is not a valid s3 path.')
    session = boto3.session.Session()
    s3_resource = session.resource('s3')
    bucket_token = s3_files_path.split('/')
    bucket = bucket_token[2]
    folder_path = bucket_token[3:]
    prefix = ""
    for path in folder_path:
        prefix = prefix + path + '/'
    try:
        result = s3_resource.meta.client.list_objects(Bucket=bucket, Prefix=prefix)
    except ClientError as e:
        raise Exception("boto3 client error in list_all_objects_based_on_last_modified function: " + e.__str__())
    except Exception as e:
        raise Exception("Unexpected error in list_all_objects_based_on_last_modified function of s3 helper: " + e.__str__())
    filtered_file_names = []
    for obj in result['Contents']:
        if str(obj["LastModified"]) >= str(last_modified_timestamp):
            full_s3_file = "s3://" + bucket + "/" + obj["Key"]
            filtered_file_names.append(full_s3_file)
    return filtered_file_names

# test.zip পেতে একটি টাইমস্ট্যাম্প দিন
print(list_all_objects_based_on_last_modified("s3://Bucket_1/testfolder", "2021-01-21 13:19:56.986445+00:00"))
# এমন একটি টাইমস্ট্যাম্প দিন যাতে কোনো ফাইল পরিবর্তিত নয়
print(list_all_objects_based_on_last_modified("s3://Bucket_1/testfolder", "2021-01-21 13:19:56.986445+00:00"))

আউটপুট

# test.zip পেতে একটি টাইমস্ট্যাম্প দিন
[s3://Bucket_1/testfolder/test.zip]
# এমন একটি টাইমস্ট্যাম্প দিন যাতে কোনো ফাইল পরিবর্তিত নয়
[]

  1. Boto3 লাইব্রেরি ব্যবহার করে Python-এ AWS সেশন তৈরি করার পদ্ধতি

  2. পাইথনে লিস্টের শেষ উপাদান পাওয়ার উপায়

  3. পাইথন লিস্ট থেকে লাস্ট এলিমেন্ট কীভাবে পাবেন?

  4. পাইথন ডিকশনারি থেকে সব ভ্যালুর লিস্ট কীভাবে পাবেন?