समस्या विवरण
Python में boto3 लाइब्रेरी का उपयोग करके S3 से फ़ाइलों की सूची प्राप्त करें, जो दिए गए दिनांक टाइमस्टैम्प के बाद संशोधित हुई हैं।
उदाहरण - यदि test.zip 2021-01-21 13:19:56.986445+00:00 के बाद संशोधित हुआ है तो S3 के Bucket_1/testfolder से test.zip सूचीबद्ध करें।
इस समस्या को हल करने का दृष्टिकोण/एल्गोरिदम
चरण 1 - अपवादों को संभालने के लिए boto3 और botocore अपवाद आयात करें।
चरण 2 - 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 टाइमज़ोन को समझता है।
चरण 3 - मान्य करें कि s3_path AWS प्रारूप में s3://bucket_name/key के रूप में पारित किया गया है।
चरण 4 - boto3 लाइब्रेरी का उपयोग करके AWS सत्र बनाएं।
चरण 5 - S3 के लिए AWS रिसोर्स बनाएं।
चरण 6 - अब list_objects फ़ंक्शन का उपयोग करके दिए गए प्रीफिक्स के सभी ऑब्जेक्ट सूचीबद्ध करें और अपवादों को संभालें।
चरण 7 - उपरोक्त फ़ंक्शन का परिणाम एक शब्दकोश है और इसमें 'Contents' नामक कुंजी में सभी फ़ाइल-स्तरीय जानकारी होती है। अब बकेट-स्तरीय विवरण को ऑब्जेक्ट में निकालें।
चरण 8 - अब ऑब्जेक्ट भी एक शब्दकोश है जिसमें फ़ाइल के सभी विवरण होते हैं। अब प्रत्येक फ़ाइल का LastModified विवरण प्राप्त करें और दिए गए दिनांक टाइमस्टैम्प के साथ तुलना करें।
चरण 9 - यदि LastModified दिए गए टाइमस्टैम्प से अधिक है, तो पूर्ण फ़ाइल नाम सहेजें, अन्यथा इसे अनदेखा करें।
चरण 10 - दिए गए दिनांक टाइमस्टैम्प के बाद संशोधित फ़ाइलों की सूची लौटाएं।
उदाहरण
अंतिम संशोधित दिनांक टाइमस्टैम्प के आधार पर 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] # टाइमस्टैम्प दें जिसके बाद कोई फ़ाइल संशोधित नहीं हुई []