সমস্যা বিবরণ − 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] # এমন একটি টাইমস্ট্যাম্প দিন যাতে কোনো ফাইল পরিবর্তিত নয় []