जाँच करें कि क्या कोई कुंजी s3 में बोटो 3 का उपयोग कर बाल्टी में मौजूद है


164

मैं जानना चाहूंगा कि क्या कोई कुंजी boto3 में मौजूद है। मैं बाल्टी सामग्री को लूप कर सकता हूं और कुंजी की जांच कर सकता हूं यदि यह मेल खाता है।

लेकिन यह लंबे समय तक और एक overkill लगता है। Boto3 आधिकारिक डॉक्स स्पष्ट रूप से बताता है कि यह कैसे करना है।

हो सकता है मैं स्पष्ट याद कर रहा हूँ। क्या कोई मुझे बता सकता है कि मैं इसे कैसे प्राप्त कर सकता हूं।

जवाबों:


195

Boto 2 के boto.s3.key.Keyऑब्जेक्ट में एक existsविधि होती थी जो यह जांचती थी कि कुंजी S3 में HEAD अनुरोध करके और परिणाम को देखते हुए अस्तित्व में है, लेकिन ऐसा लगता है कि अब मौजूद नहीं है। आपको इसे स्वयं करना होगा:

import boto3
import botocore

s3 = boto3.resource('s3')

try:
    s3.Object('my-bucket', 'dootdoot.jpg').load()
except botocore.exceptions.ClientError as e:
    if e.response['Error']['Code'] == "404":
        # The object does not exist.
        ...
    else:
        # Something else has gone wrong.
        raise
else:
    # The object does exist.
    ...

load() एक एकल कुंजी के लिए HEAD अनुरोध करता है, जो तेज है, भले ही प्रश्न में वस्तु बड़ी हो या आपकी बाल्टी में कई वस्तुएं हों।

बेशक, आप जाँच सकते हैं कि क्या वस्तु मौजूद है क्योंकि आप इसका उपयोग करने की योजना बना रहे हैं। अगर ऐसा है, तो आप बस के बारे में भूल सकते हैं load()और एक get()या download_file()सीधे कर सकते हैं, फिर वहां त्रुटि मामले को संभालें।


त्वरित उत्तर के लिए धन्यवाद वांडर। मुझे बस boto3 के लिए समान चाहिए।
प्रभाकर शनमुगम

12
के लिए boto3, यह सबसे अच्छा लगता है कि आप इस समय head_objectकोशिश कर सकते हैं और कुंजी के लिए मेटाडेटा लाने के लिए कॉल कर सकते हैं , फिर परिणामी त्रुटि को संभालें यदि यह मौजूद नहीं है।
वांडर नौटा

1
@ लियोनिड आप निश्चित रूप से कर सकते हैं, लेकिन केवल अगर आप इसे एक फ़ंक्शन या विधि में लपेटते हैं, जो आपके ऊपर है। मैंने उदाहरण कोड को थोड़ा संशोधित किया है ताकि existsबूलियन चला जाए, और यह स्पष्ट हो (मुझे आशा है!) कि लोग इसे अपनी स्थिति के अनुकूल बनाने वाले हैं।
वांडर नौटा

2
-1; मेरे लिए काम नहीं करता है। Boto3 संस्करण 1.5.26 पर मुझे e.response['Error']['Code']एक मान मिलता है जैसे "NoSuchKey", नहीं "404"। मैंने जाँच नहीं की है कि क्या यह लाइब्रेरी संस्करणों में अंतर के कारण है या इस उत्तर के लिखे जाने के बाद से एपीआई में ही बदलाव आया है। किसी भी तरह से, boto3 के मेरे संस्करण में, जाँच e.response['Error']['Code']करने की तुलना में एक छोटा दृष्टिकोण केवल s3.meta.client.exceptions.NoSuchKeyपहली जगह में पकड़ना है।
मार्क अमेरी

2
यदि आप एक s3 का उपयोग कर रहे हैं client(एक के विपरीत resource) तो इसके s3.head_object(Bucket='my_bucket', Key='my_key')बजाय करेंs3.Object(...).load()
user2426679

126

मैं नियंत्रण प्रवाह के अपवादों का उपयोग करने का एक बड़ा प्रशंसक नहीं हूं। यह एक वैकल्पिक दृष्टिकोण है जो बोटो 3 में काम करता है:

import boto3

s3 = boto3.resource('s3')
bucket = s3.Bucket('my-bucket')
key = 'dootdoot.jpg'
objs = list(bucket.objects.filter(Prefix=key))
if any([w.key == path_s3 for w in objs]):
    print("Exists!")
else:
    print("Doesn't exist")

अद्यतन के लिए धन्यवाद EvilPuppetMaster। दुर्भाग्य से जब मैंने आखिरी बार जाँच की तो मेरे पास बकेट एक्सेस अधिकारों की सूची नहीं थी। आपका जवाब मेरे प्रश्न के लिए उपयुक्त है, इसलिए मैंने आपको वोट दिया है। लेकिन मैंने पहले उत्तर के रूप में पहले उत्तर को पहले ही चिह्नित कर लिया था। आपकी सहायता के लिए धन्यवाद।
प्रभाकर शनमुगम

27
क्या यह सूची अनुरोध के रूप में नहीं मिलती (12.5x अधिक महंगा है)? यदि आप इसे 100 मिलियन ऑब्जेक्ट्स के लिए करते हैं, तो यह थोड़ा महंगा हो सकता है ... मुझे यह महसूस होता है कि कैच-अपवाद विधि दुर्भाग्य से अब तक का सबसे अच्छा है।
पियरे डी

21
अनुरोध के अनुसार सूची 12.5x महंगी हो सकती है, लेकिन एक एकल अनुरोध 100 मिलियन वस्तुओं को भी वापस कर सकता है जहां एक एकल प्राप्त केवल एक वापस कर सकता है। इसलिए आपके काल्पनिक मामले में, सूची के साथ सभी 100 मिलियन प्राप्त करना और फिर स्थानीय स्तर पर तुलना करना सस्ता होगा, 100 मीटर व्यक्तिगत करने की तुलना में। 1000x तेज़ी से उल्लेख करने के लिए नहीं क्योंकि आपको हर वस्तु के लिए http दौर की यात्रा की आवश्यकता नहीं होगी।
एविलपुपेटमास्टर

यह काम नहीं कर रहा है जब मेरी फाइल एक s3 बाल्टी के भीतर फ़ोल्डरों के अंदर है
user3186866

2
@ user3186866 ऐसा इसलिए है क्योंकि S3 में वास्तव में "फ़ोल्डर्स" नहीं हैं। सभी ऑब्जेक्ट उनके दिए गए पथों पर फ़ाइलों के रूप में मौजूद हैं। फोल्डर्स हमारे भंडारण की संरचना को व्यवस्थित और समझने में हमारी मदद करने का एक उपकरण है, लेकिन वास्तव में, S3 बाल्टी बस, बाल्टी हैं।
ibtokin

114

सबसे आसान तरीका मुझे मिला (और शायद सबसे कुशल) यह है:

import boto3
from botocore.errorfactory import ClientError

s3 = boto3.client('s3')
try:
    s3.head_object(Bucket='bucket_name', Key='file_path')
except ClientError:
    # Not found
    pass

2
नोट: यदि आप एक भूमिका का उपयोग कर रहे हैं या .aws config में हैं, तो आपको aws_access_key_id / aws_secret_access_key आदि पास करने की आवश्यकता नहीं है, आप बस कर सकते हैंs3 = boto3.client('s3')
एंडी हेडन

20
मुझे लगता है कि इस परीक्षण को जोड़ने से आपको थोड़ा और विश्वास मिलता है कि वस्तु वास्तव में मौजूद नहीं है, इसके बजाय कुछ अन्य त्रुटि अपवाद को बढ़ाती है - ध्यान दें कि 'ई' क्लाइंटइरॉर्स अपवाद उदाहरण है:if e.response['ResponseMetadata']['HTTPStatusCode'] == 404:
रिचर्ड

@AndyHayden aws cost के रूप में प्रत्येक व्यक्ति क्या गिनाएगा?
लूप

2
@ यह एक अनुरोध है, लेकिन बिना किसी डेटा ट्रांसफर के।
एंडी हेडन

1
ClientError 400 के लिए एक पकड़ है, न कि केवल 404 इसलिए यह मजबूत नहीं है।
मिकज़र

21

Boto3 में, यदि आप किसी फ़ोल्डर (उपसर्ग) या list_objects का उपयोग करके किसी फ़ाइल के लिए जाँच कर रहे हैं। आप प्रतिक्रिया में 'सामग्री' के अस्तित्व का उपयोग कर सकते हैं कि क्या वस्तु मौजूद है या नहीं। यह कोशिश से बचने का एक और तरीका है / कैच को छोड़कर @EvilPuppetMaster बताता है

import boto3
client = boto3.client('s3')
results = client.list_objects(Bucket='my-bucket', Prefix='dootdoot.jpg')
return 'Contents' in results

2
इसमें एक समस्या थी। list_objects ("2000") "2000-01", "2000-02" जैसी कुंजियाँ लौटाएगा
गुणन चेंग

3
यह केवल 1000 वस्तुओं तक लौटता है! boto3.amazonaws.com/v1/documentation/api/latest/reference/…
RoachLord

यह इस रूप में सबसे कुशल समाधान की आवश्यकता नहीं है है s3:GetObjectअनुमतियाँ केवल s3:ListBucketअनुमतियों
Vishrant

11

इतना ही नहीं clientबल्कि bucket:

import boto3
import botocore
bucket = boto3.resource('s3', region_name='eu-west-1').Bucket('my-bucket')

try:
  bucket.Object('my-file').get()
except botocore.exceptions.ClientError as ex:
  if ex.response['Error']['Code'] == 'NoSuchKey':
    print('NoSuchKey')

3
आप ऑब्जेक्ट प्राप्त नहीं करना चाहते हैं, लेकिन बस देखते हैं कि क्या यह वहाँ है। आप एक ऐसी विधि का उपयोग कर सकते हैं, जो वस्तु को अन्य उदाहरणों की तरह यहां प्रस्तुत करती है, जैसे कि bucket.Object(key).last_modified
ryanjdillon 14

10

आप S3Fs का उपयोग कर सकते हैं , जो अनिवार्य रूप से boto3 के आसपास एक आवरण है जो विशिष्ट फ़ाइल-सिस्टम शैली संचालन को उजागर करता है:

import s3fs
s3 = s3fs.S3FileSystem()
s3.exists('myfile.txt')

हालांकि मुझे लगता है कि यह काम करेगा, सवाल यह पूछता है कि यह कैसे करना है boto3 के साथ; इस मामले में, अतिरिक्त पुस्तकालय स्थापित किए बिना समस्या को हल करना व्यावहारिक है।
पॉलकर्नफेल्ड

5
import boto3
client = boto3.client('s3')
s3_key = 'Your file without bucket name e.g. abc/bcd.txt'
bucket = 'your bucket name'
content = client.head_object(Bucket=bucket,Key=s3_key)
    if content.get('ResponseMetadata',None) is not None:
        print "File exists - s3://%s/%s " %(bucket,s3_key) 
    else:
        print "File does not exist - s3://%s/%s " %(bucket,s3_key)

5

एफडब्ल्यूआईडब्ल्यू, यहां बहुत ही सरल कार्य हैं जो मैं उपयोग कर रहा हूं

import boto3

def get_resource(config: dict={}):
    """Loads the s3 resource.

    Expects AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY to be in the environment
    or in a config dictionary.
    Looks in the environment first."""

    s3 = boto3.resource('s3',
                        aws_access_key_id=os.environ.get(
                            "AWS_ACCESS_KEY_ID", config.get("AWS_ACCESS_KEY_ID")),
                        aws_secret_access_key=os.environ.get("AWS_SECRET_ACCESS_KEY", config.get("AWS_SECRET_ACCESS_KEY")))
    return s3


def get_bucket(s3, s3_uri: str):
    """Get the bucket from the resource.
    A thin wrapper, use with caution.

    Example usage:

    >> bucket = get_bucket(get_resource(), s3_uri_prod)"""
    return s3.Bucket(s3_uri)


def isfile_s3(bucket, key: str) -> bool:
    """Returns T/F whether the file exists."""
    objs = list(bucket.objects.filter(Prefix=key))
    return len(objs) == 1 and objs[0].key == key


def isdir_s3(bucket, key: str) -> bool:
    """Returns T/F whether the directory exists."""
    objs = list(bucket.objects.filter(Prefix=key))
    return len(objs) > 1

1
यह एकमात्र प्रतिक्रिया है जो मैंने देखी कि एक 'फ़ाइल' की तुलना में 'फ़ोल्डर' के लिए अस्तित्व की जाँच की। यह रूटीन के लिए अति-महत्वपूर्ण है जो यह जानना चाहता है कि क्या कोई विशिष्ट फ़ोल्डर मौजूद है, किसी फ़ोल्डर में विशिष्ट फ़ाइलें नहीं।
डेव कैंपबेल

हालांकि यह एक सावधानीपूर्वक उत्तर है यह केवल तभी उपयोगी है जब उपयोगकर्ता यह समझे कि इस मामले में एक फ़ोल्डर की धारणा भ्रामक है। एक खाली 'फ़ोल्डर' S3 में एक बकेट के अंदर मौजूद हो सकता है और यदि ऐसा होता है तो isdir_s3 वापस आ जाएगा, तो फाल्स ने मुझे हल करने में कुछ मिनटों का समय लिया, क्योंकि मैं इस उत्तर को संपादित करने के बारे में सोच रहा था जैसे कि अभिव्यक्ति को 0 पर बदल दिया जाता है। परिणाम आप उम्मीद कर रहे हैं
PyNEwbie

5

मान लें कि आप जांचना चाहते हैं कि क्या कोई कुंजी मौजूद है (चुपचाप इसे लिखने के बजाय), तो पहले यह जांच करें:

import boto3

def key_exists(mykey, mybucket):
  s3_client = boto3.client('s3')
  response = s3_client.list_objects_v2(Bucket=mybucket, Prefix=mykey)
  if response:
      for obj in response['Contents']:
          if mykey == obj['Key']:
              return True
  return False

if key_exists('someprefix/myfile-abc123', 'my-bucket-name'):
    print("key exists")
else:
    print("safe to put new bucket object")
    # try:
    #     resp = s3_client.put_object(Body="Your string or file-like object",
    #                                 Bucket=mybucket,Key=mykey)
    # ...check resp success and ClientError exception for errors...

3

इस सरल की कोशिश करो

import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket('mybucket_name') # just Bucket name
file_name = 'A/B/filename.txt'      # full file path
obj = list(bucket.objects.filter(Prefix=file_name))
if len(obj) > 0:
    print("Exists")
else:
    print("Not Exists")

3

यह उपसर्ग और कुंजी दोनों की जांच कर सकता है, और अधिकांश 1 कुंजी पर प्राप्त कर सकता है।

def prefix_exits(bucket, prefix):
    s3_client = boto3.client('s3')
    res = s3_client.list_objects_v2(Bucket=bucket, Prefix=prefix, MaxKeys=1)
    return 'Contents' in res

1

यदि आपके पास एक निर्देशिका या बाल्टी में 1000 से कम है, तो आप उनमें से सेट कर सकते हैं और जांच कर सकते हैं कि क्या इस सेट में ऐसी कुंजी है:

files_in_dir = {d['Key'].split('/')[-1] for d in s3_client.list_objects_v2(
Bucket='mybucket',
Prefix='my/dir').get('Contents') or []}

ऐसा कोड भले ही काम करता हो my/dir मौजूद नहीं होने पर है।

http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.list_objects_v2


1
S3_REGION="eu-central-1"
bucket="mybucket1"
name="objectname"

import boto3
from botocore.client import Config
client = boto3.client('s3',region_name=S3_REGION,config=Config(signature_version='s3v4'))
list = client.list_objects_v2(Bucket=bucket,Prefix=name)
for obj in list.get('Contents', []):
    if obj['Key'] == name: return True
return False

1

Boto3 के लिए, ObjectSummary का उपयोग यह जांचने के लिए किया जा सकता है कि कोई वस्तु मौजूद है या नहीं।

अमेज़ॅन S3 बाल्टी में संग्रहीत ऑब्जेक्ट का सारांश समाहित करता है। इस ऑब्जेक्ट में ऑब्जेक्ट का पूरा मेटाडेटा या उसकी कोई सामग्री शामिल नहीं है

import boto3
from botocore.errorfactory import ClientError
def path_exists(path, bucket_name):
    """Check to see if an object exists on S3"""
    s3 = boto3.resource('s3')
    try:
        s3.ObjectSummary(bucket_name=bucket_name, key=path).load()
    except ClientError as e:
        if e.response['Error']['Code'] == "404":
            return False
        else:
            raise e
    return True

path_exists('path/to/file.html')

में ObjectSummary.load

ऑब्जेक्ट Summary संसाधन की विशेषताओं को अद्यतन करने के लिए s3.Client.head_object को कॉल करता है।

इससे पता चलता है कि आप उपयोग कर सकते हैं ObjectSummaryके बजाय Objectअगर आप का उपयोग नहीं करने की योजना बना रहे हैं get()load()समारोह वस्तु यह केवल सारांश प्राप्त पुनः प्राप्त नहीं करता है।


1

यहाँ एक समाधान है जो मेरे लिए काम करता है। एक चेतावनी यह है कि मैं समय से पहले कुंजी का सटीक प्रारूप जानता हूं, इसलिए मैं केवल एकल फ़ाइल सूचीबद्ध कर रहा हूं

import boto3

# The s3 base class to interact with S3
class S3(object):
  def __init__(self):
    self.s3_client = boto3.client('s3')

  def check_if_object_exists(self, s3_bucket, s3_key):
    response = self.s3_client.list_objects(
      Bucket = s3_bucket,
      Prefix = s3_key
      )
    if 'ETag' in str(response):
      return True
    else:
      return False

if __name__ == '__main__':
  s3  = S3()
  if s3.check_if_object_exists(bucket, key):
    print "Found S3 object."
  else:
    print "No object found."

1

आप इसके लिए Boto3 का उपयोग कर सकते हैं।

import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket('my-bucket')
objs = list(bucket.objects.filter(Prefix=key))
if(len(objs)>0):
    print("key exists!!")
else:
    print("key doesn't exist!")

यहां कुंजी वह पथ है जिसे आप जांचना चाहते हैं कि मौजूद है या नहीं


एक साधारण %timeitपरीक्षण से यह सबसे तेज विकल्प लगता है
इटमार काट्ज

1

यह वास्तव में get()विधि के साथ सरल है

import botocore
from boto3.session import Session
session = Session(aws_access_key_id='AWS_ACCESS_KEY',
                aws_secret_access_key='AWS_SECRET_ACCESS_KEY')
s3 = session.resource('s3')
bucket_s3 = s3.Bucket('bucket_name')

def not_exist(file_key):
    try:
        file_details = bucket_s3.Object(file_key).get()
        # print(file_details) # This line prints the file details
        return False
    except botocore.exceptions.ClientError as e:
        if e.response['Error']['Code'] == "NoSuchKey": # or you can check with e.reponse['HTTPStatusCode'] == '404'
            return True
        return False # For any other error it's hard to determine whether it exists or not. so based on the requirement feel free to change it to True/ False / raise Exception

print(not_exist('hello_world.txt')) 

मजबूत नहीं, अपवाद कई कारणों से फेंका जा सकता है जैसे HTTP 500 और यह कोड 404 होगा।
mickzer

लेकिन हमें इस बारे में जानकारी चाहिए, कि फाइल सुलभ है या नहीं। यह मौजूद है और यह सुलभ नहीं है तो यह अस्तित्व में नहीं होने के बराबर है। सही?
जांबाज

@mickzer अब परिवर्तनों की जाँच करें।
इसाम्बेट

1
आपको पिछली टिप्पणी का उत्तर देने के लिए, नहीं, HTTP 500 पर व्यवहार, पुन: प्रयास करने के लिए हो सकता है, 401/403 परिक्रिया को ठीक करने के लिए आदि। वास्तविक त्रुटि कोड की जांच करना महत्वपूर्ण है।
मिकर

0

एक सरल तरीका है जिसके द्वारा हम जांच सकते हैं कि फ़ाइल मौजूद है या नहीं S3 बाल्टी में। हमें इसके लिए अपवाद का उपयोग करने की आवश्यकता नहीं है

sesssion = boto3.Session(aws_access_key_id, aws_secret_access_key)
s3 = session.client('s3')

object_name = 'filename'
bucket = 'bucketname'
obj_status = s3.list_objects(Bucket = bucket, Prefix = object_name)
if obj_status.get('Contents'):
    print("File exists")
else:
    print("File does not exists")

यह गलत होगा यदि एक फाइल जो object_nameबाल्टी में शुरू होती है, मौजूद है। my_file.txt.oldversionयदि आप जाँच करते हैं, तो उदाहरण एक गलत सकारात्मक लौटाएगा my_file.txt। अधिकांश के लिए एक किनारे का मामला, लेकिन "फ़ाइल मौजूद है" के रूप में व्यापक के लिए कुछ है कि आप अपने आवेदन भर में उपयोग करने की संभावना है शायद ध्यान में लेने लायक है।
एंड्रयू श्वार्ट्ज

0

यदि आप एक ऐसी कुंजी की तलाश करते हैं जो एक निर्देशिका के बराबर है तो आप इस दृष्टिकोण को चाह सकते हैं

session = boto3.session.Session()
resource = session.resource("s3")
bucket = resource.Bucket('mybucket')

key = 'dir-like-or-file-like-key'
objects = [o for o in bucket.objects.filter(Prefix=key).limit(1)]    
has_key = len(objects) > 0

यह एक पैरेंट कुंजी या एक कुंजी के लिए काम करता है जो फाइल या एक ऐसी कुंजी के बराबर है जो मौजूद नहीं है। मैंने ऊपर के पसंदीदा दृष्टिकोण की कोशिश की और माता-पिता की चाबियों पर विफल रहा।


0

मैंने देखा कि केवल botocore.exceptions.ClientErrorबॉटकोर को स्थापित करने के लिए हमें अपवाद को पकड़ने की आवश्यकता है। बॉटकोर में 36M डिस्क स्थान होता है। यह विशेष रूप से प्रभावित करता है अगर हम अम्बे के कार्यों का उपयोग करते हैं। उसके स्थान पर यदि हम केवल अपवाद का उपयोग करते हैं तो हम अतिरिक्त पुस्तकालय का उपयोग कर छोड़ सकते हैं!

  • मैं '.csv' फ़ाइल एक्सटेंशन के लिए मान्य कर रहा हूं
  • यह एक अपवाद नहीं फेंक देगा अगर बाल्टी मौजूद नहीं है!
  • यह एक अपवाद नहीं फेंकेगा अगर बाल्टी मौजूद है लेकिन वस्तु मौजूद नहीं है!
  • यह एक अपवाद बाहर फेंकता है अगर बाल्टी खाली है!
  • अगर बाल्टी की कोई अनुमति नहीं है, तो यह एक अपवाद को बाहर निकालता है!

कोड इस तरह दिखता है। कृपया अपने विचार साझा करें:

import boto3
import traceback

def download4mS3(s3bucket, s3Path, localPath):
    s3 = boto3.resource('s3')

    print('Looking for the csv data file ending with .csv in bucket: ' + s3bucket + ' path: ' + s3Path)
    if s3Path.endswith('.csv') and s3Path != '':
        try:
            s3.Bucket(s3bucket).download_file(s3Path, localPath)
        except Exception as e:
            print(e)
            print(traceback.format_exc())
            if e.response['Error']['Code'] == "404":
                print("Downloading the file from: [", s3Path, "] failed")
                exit(12)
            else:
                raise
        print("Downloading the file from: [", s3Path, "] succeeded")
    else:
        print("csv file not found in in : [", s3Path, "]")
        exit(12)

AWS का कहना है कि अजगर रनटाइम boto3 के साथ आते हैं: पूर्वस्थापित: docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html
rinat.io

0

धागे के बाद, क्या कोई यह निष्कर्ष निकाल सकता है कि एस 3 में कोई वस्तु मौजूद है या नहीं, यह जांचने का सबसे कारगर तरीका क्या है?

मुझे लगता है कि head_object जीत सकता है क्योंकि यह सिर्फ मेटाडेटा की जाँच करता है जो वास्तविक वस्तु से हल्का होता है


0

से https://www.peterbe.com/plog/fastest-way-to-find-out-if-a-file-exists-in-s3 इस को दिखाया गया है सबसे तेजी से विधि के लिए:

import boto3

boto3_session = boto3.session.Session()
s3_session_client = boto3_session.client("s3")
response = s3_session_client.list_objects_v2(
    Bucket=bc_df_caches_bucket, Prefix=s3_key
)
for obj in response.get("Contents", []):
    if obj["Key"] == s3_key:
        return True
return False

-1

चेक आउट

bucket.get_key(
    key_name, 
    headers=None, 
    version_id=None, 
    response_headers=None, 
    validate=True
)

यह देखने के लिए जांचें कि क्या बाल्टी के भीतर कोई विशेष कुंजी मौजूद है। यह विधि कुंजी के अस्तित्व की जांच करने के लिए एक HEAD अनुरोध का उपयोग करती है। रिटर्न: एक प्रमुख वस्तु का उदाहरण या कोई नहीं

से Boto S3 डॉक्स

आप सिर्फ bucket.get_key (keyname) को कॉल कर सकते हैं और जांच सकते हैं कि लौटी हुई वस्तु कोई नहीं है।


यह boto3 के साथ काम नहीं करता है, जैसा कि ओपी द्वारा अनुरोध किया गया है
मार्क

AWS बोटो लाइब्रेरी के दो संस्करण हैं। यह उत्तर उस संस्करण के साथ काम नहीं करता है जो प्रश्न द्वारा अनुरोध किया गया था।
मार्क

यह सुनिश्चित है कि ओपी के लिए एक सही उत्तर नहीं है, लेकिन यह मेरी मदद करता है क्योंकि मुझे बोटो वी 2 का उपयोग करने की आवश्यकता है। यही कारण है कि मैंने एक नकारात्मक वोट हटा दिया।
ha --r 1ukaͣreͤrͬu
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.