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

AWS रिसोर्स में मौजूद S3 से ऑब्जेक्ट के सभी संस्करणों की सूची प्राप्त करना


इस लेख में, हम देखेंगे कि AWS रिसोर्स में मौजूद S3 से ऑब्जेक्ट के सभी संस्करणों की सूची कैसे प्राप्त करें।

उदाहरण

S3 के Bucket_1/testfolder से test.zip के सभी संस्करणों को सूचीबद्ध करें।

समस्या कथन: S3 से ऑब्जेक्ट के सभी संस्करणों की सूची प्राप्त करने के लिए पायथन में boto3 लाइब्रेरी का उपयोग करें।

समस्या हल करने का दृष्टिकोण/एल्गोरिदम

  • चरण 1: boto3 और botocore एक्सेप्शन आयात करें ताकि एक्सेप्शन संभाले जा सकें।

  • चरण 2: bucket_name आवश्यक पैरामीटर है।

  • चरण 3: boto3 लाइब्रेरी का उपयोग करके AWS सत्र बनाएं।

  • चरण 4: S3 के लिए AWS क्लाइंट बनाएं।

  • चरण 5: अब, list_object_versions फ़ंक्शन का उपयोग करके दिए गए बकेट के ऑब्जेक्ट के सभी संस्करणों को सूचीबद्ध करें और एक्सेप्शन को संभालें, यदि कोई हो।

  • चरण 6: उपरोक्त फ़ंक्शन का परिणाम एक डिक्शनरी है और दिए गए बकेट में ऑब्जेक्ट के सभी संस्करणों को समाहित करता है।

  • चरण 7: ऑब्जेक्ट के सभी संस्करणों की सूची लौटाएं।

उदाहरण कोड

AWS S3 से ऑब्जेक्ट के सभी संस्करणों की सूची प्राप्त करने के लिए निम्न कोड का उपयोग करें:

import boto3
from botocore.exceptions import ClientError

def list_all_objects_version(bucket_name, prefix_name):
    session = boto3.session.Session()
    s3_client = session.client('s3')
    try:
        result = s3_client.list_object_versions(Bucket=bucket_name, Prefix=prefix_name)
    except ClientError as e:
        raise Exception("boto3 client error in list_all_objects_version function: " + e.__str__())
    except Exception as e:
        raise Exception("Unexpected error in list_all_objects_version function of s3 helper: " + e.__str__())
    return result

print(list_all_objects_version("Bucket_1", "testfolder"))

आउटपुट

{'ResponseMetadata': {'RequestId': 'H4VAGM3YP6', 'HostId': '***********', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amz-id-2': '***************', 'x-amz-request-id': 'H4VAGM3YP6', 'date': 'Sat, 03 Apr 2021 08:04:08 GMT', 'content-type': 'application/xml', 'transfer-encoding': 'chunked', 'server': 'AmazonS3'}, 'RetryAttempts': 0}, 'IsTruncated': False, 'KeyMarker': '', 'VersionIdMarker': '', 'Versions': [{'ETag': '"705e2e674b04ca71"', 'Size': 1773, 'StorageClass': 'STANDARD', 'Key': 'testfolder/test.zip', 'VersionId': 'null', 'IsLatest': True, 'LastModified': datetime.datetime(2020, 12, 18, 14, 13, 18, tzinfo=tzutc()), 'Owner': {'DisplayName': 'AWS.Development', 'ID': '928*******************************}}], 'Name': 'Bucket_1', 'Prefix': 'testfolder', 'MaxKeys': 1000, 'EncodingType': 'url'}

महत्वपूर्ण नोट्स

  • Prefix पैरामीटर का उपयोग विशिष्ट "फोल्डर" या ऑब्जेक्ट तक परिणामों को फ़िल्टर करने के लिए किया जाता है।

  • Versions सूची में ऑब्जेक्ट के सभी संस्करण होते हैं।

  • DeleteMarkers (यदि मौजूद) हटाने के ऑपरेशन को दर्शाते हैं।

  • VersionId: 'null' का अर्थ है कि ऑब्जेक्ट वर्जनिंग सक्षम होने से पहले अपलोड किया गया था।

  • IsLatest: True वर्तमान नवीनतम संस्करण को इंगित करता है।

विशिष्ट ऑब्जेक्ट के लिए फ़िल्टर करना

यदि आप किसी विशिष्ट ऑब्जेक्ट (जैसे test.zip) के केवल संस्करण चाहते हैं, तो परिणाम को फ़िल्टर करें:

def get_object_versions(bucket_name, object_key):
    response = s3_client.list_object_versions(Bucket=bucket_name, Prefix=object_key)
    versions = [v for v in response.get('Versions', []) if v['Key'] == object_key]
    delete_markers = [dm for dm in response.get('DeleteMarkers', []) if dm['Key'] == object_key]
    return versions, delete_markers

IAM अनुमति

s3:ListBucketVersions अनुमति आवश्यक है।


  1. - मैटप्लॉट्लिब में कंटूर से कोऑर्डिनेट्स कैसे प्राप्त करें?

    मैटप्लॉट्लिब में कंटूर से कोऑर्डिनेट्स प्राप्त करने के लिए, हम निम्न चरणों का पालन कर सकते हैं: फिगर का आकार सेट करें और सबप्लॉट्स के बीच और आसपास पैडिंग एडजस्ट करें। डेटा पॉइंट्स के साथ x, y और m की सूचियाँ बनाएं। x, y और m डेटा पॉइंट्स के साथ कंटूर प्लॉट बनाने के लिए plt.contour(x, y, m) का उपयो

  1. - पायथन - स्ट्रिंग से सभी अंकों को कैसे निकालें

    परिचय जब अंक वाले स्ट्रिंग्स को निकालना हो, तो लिस्ट कॉम्प्रिहेंशन और isdigit मेथड का उपयोग किया जाता है। उदाहरण my_string = python is 12 fun 2 learn print(The string is : ) print(my_string) my_result = [int(i) for i in my_string.split() if i.isdigit()] print(The numbers list is :) print(my_resul

  1. Matplotlib में प्लॉट से सभी लीजेंड्स कैसे प्राप्त करें? Matplotlib में प्लॉट से सभी लीजेंड्स कैसे प्राप्त करें?

    Matplotlib में प्लॉट से सभी लीजेंड्स प्राप्त करने के लिए, हम एक्सिस की सभी प्रॉपर्टीज़ प्राप्त करने के लिए get_children() मेथड का उपयोग कर सकते हैं, फिर सभी प्रॉपर्टीज़ को इटरेट करें। यदि कोई आइटम Legend का इंस्टेंस है, तो लीजेंड टेक्स्ट प्राप्त करें। चरण फिगर साइज सेट करें और सबप्लॉट्स के बीच और