Python 仅从s3 bucket文件夹获取文件名

Python 仅从s3 bucket文件夹获取文件名,python,python-3.x,amazon-web-services,amazon-s3,aws-lambda,Python,Python 3.x,Amazon Web Services,Amazon S3,Aws Lambda,我有一个名为“Sample\u bucket”的s3 bucket,其中有一个名为“Sample\u folder”的文件夹。我只需要获取“Sample_folder”文件夹中所有文件的名称 我正在使用以下代码执行此操作- import boto3 s3 = boto3.resource('s3', region_name='us-east-1', verify=False) bucket = s3.Bucket('Sample_Bucket') for files in buc

我有一个名为“Sample\u bucket”的s3 bucket,其中有一个名为“Sample\u folder”的文件夹。我只需要获取“Sample_folder”文件夹中所有文件的名称

我正在使用以下代码执行此操作-

import boto3
s3 = boto3.resource('s3', region_name='us-east-1', verify=False)
    bucket = s3.Bucket('Sample_Bucket')
    for files in bucket.objects.filter(Prefix='Sample_Folder):
        print(files)
变量文件包含以文件名为键的对象变量

s3.ObjectSummary(bucket_name='Sample-Bucket', key='Sample_Folder/Sample_File.txt')
但我只需要文件名。
我如何提取?或者还有其他方法吗?

您应该使用list\u object\u v2,它根据所使用的定义前缀提供列表

。。。一小条
文件名=[]
获取文件名(s3):
结果=s3。列出对象(Bucket=Bucket,Prefix=Prefix)
对于结果['Contents']中的项:
文件=项['Key']
打印(文件)
filenames.append(files)#如果您有更多的文件文件夹要处理,则可选。
返回文件名
获取文件名(我的bucketfolder)
给你

import boto3


bucket = "Sample_Bucket"
folder = "Sample_Folder"
s3 = boto3.resource("s3")
s3_bucket = s3.Bucket(bucket)
files_in_s3 = [f.key.split(folder + "/")[1] for f in s3_bucket.objects.filter(Prefix=folder).all()]

对于我自己,我做了一个你可能会觉得有用的函数:

import boto3


s3_client = boto3.client('s3')


def list_objects_without_response_metadata(**kwargs):
    ContinuationToken = None
    while True:
        if ContinuationToken:
            kwargs["ContinuationToken"] = ContinuationToken
        res = s3_client.list_objects_v2(**kwargs)
        for obj in res["Contents"]:
            yield obj
        ContinuationToken = res.get("NextContinuationToken", None)
        if not ContinuationToken:
            break


file_names = [obj["Key"] for obj in list_objects_without_response_metadata(Bucket='Sample_Bucket', Prefix='Sample_Folder')]

这回答了你的问题吗?最多可以获得1000个对象。令人难以置信的是,他们硬编码了这个限制,你不能改变。谢谢。我喜欢在可能的情况下使用bot3.resource。