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

AWS Resource का उपयोग करके अंतिम संशोधित दिनांक के आधार पर S3 से फ़ाइलों की सूची कैसे प्राप्त करें?


समस्या विवरण

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]
# टाइमस्टैम्प दें जिसके बाद कोई फ़ाइल संशोधित नहीं हुई
[]

  1. - पायथन में सूची का अंतिम तत्व प्राप्त करना

    इस ट्यूटोरियल में, हम सूची से अंतिम तत्व प्राप्त करने के विभिन्न तरीके देखेंगे। आइए एक-एक करके देखें। इंडेक्स हम सूची के अंतिम तत्व को इंडेक्स का उपयोग करके प्राप्त कर सकते हैं। और हम सूची की लंबाई से अंतिम तत्व का इंडेक्स प्राप्त कर सकते हैं। आइए कोड देखें। उदाहरण # सूची आरंभ करना numbers = [1, 2

  1. - Python में लिस्ट का लास्ट एलिमेंट कैसे प्राप्त करें?

    Python सीक्वेंस, जिसमें लिस्ट ऑब्जेक्ट शामिल है, इंडेक्सिंग की अनुमति देता है। लिस्ट में किसी भी एलिमेंट को जीरो-बेस्ड इंडेक्स का उपयोग करके एक्सेस किया जा सकता है। यदि इंडेक्स नेगेटिव नंबर है, तो इंडेक्स की गिनती अंत से शुरू होती है। चूंकि हम लिस्ट में लास्ट एलिमेंट चाहते हैं, -1 को इंडेक्स के रूप

  1. - पायथन डिक्शनरी से सभी मानों की सूची कैसे प्राप्त करें?

    डिक्शनरी से सभी कीज़ की सूची प्राप्त करने के लिए, आप बस dict.values() फंक्शन का उपयोग कर सकते हैं। उदाहरण my_dict = {name: TutorialsPoint, time: 15 years, location: India} value_list = list(my_dict.values()) print(value_list) आउटपुट यह आउटपुट देगा - [TutorialsPoint, 15 years, India] आप लिस्ट कॉम