Python boto, list contents of specific dir in bucket

前端 未结 7 1799
难免孤独
难免孤独 2020-12-13 18:19

I have S3 access only to a specific directory in an S3 bucket.

For example, with the s3cmd command if I try to list the whole bucket:

             


        
7条回答
  •  爱一瞬间的悲伤
    2020-12-13 19:02

    Boto3 client:

    import boto3
    
    _BUCKET_NAME = 'mybucket'
    _PREFIX = 'subfolder/'
    
    client = boto3.client('s3', aws_access_key_id=ACCESS_KEY,
                                aws_secret_access_key=SECRET_KEY)
    
    def ListFiles(client):
        """List files in specific S3 URL"""
        response = client.list_objects(Bucket=_BUCKET_NAME, Prefix=_PREFIX)
        for content in response.get('Contents', []):
            yield content.get('Key')
    
    file_list = ListFiles(client)
    for file in file_list:
        print 'File found: %s' % file
    

    Using session

    from boto3.session import Session
    
    _BUCKET_NAME = 'mybucket'
    _PREFIX = 'subfolder/'
    
    session = Session(aws_access_key_id=ACCESS_KEY,
                      aws_secret_access_key=SECRET_KEY)
    
    client = session.client('s3')
    
    def ListFilesV1(client, bucket, prefix=''):
        """List files in specific S3 URL"""
        paginator = client.get_paginator('list_objects')
        for result in paginator.paginate(Bucket=bucket, Prefix=prefix,
                                         Delimiter='/'):
            for content in result.get('Contents', []):
                yield content.get('Key')
    
    file_list = ListFilesV1(client, _BUCKET_NAME, prefix=_PREFIX)
    for file in file_list:
        print 'File found: %s' % file
    

提交回复
热议问题