我有一个名为“ Sample_Bucket”的s3存储桶,其中有一个名为“ Sample_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')
但是我只需要文件名。 我该如何提取?还是有其他方法可以做到?
答案 0 :(得分:1)
你在这里。
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()]
答案 1 :(得分:0)
您应该使用list_object_v2,它会从使用的已定义前缀中为您提供列表。
... snippet ...
filenames = []
get_filenames(s3):
result = s3.list_objects_v2(Bucket=bucket, Prefix=prefix)
for item in result['Contents']:
files = item['Key']
print(files)
filenames.append(files) #optional if you have more filefolders to got through.
return filenames
get_filenames(my_bucketfolder)
答案 2 :(得分:0)
对于我自己,我做了一个你可能会觉得有用的函数:
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')]
答案 3 :(得分:0)
如果您不想使用 boto3.client
而更喜欢 boto3.resource
,您可以使用此代码段列出目录中的所有目录名称。
import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket("Sample_Bucket")
res = bucket.meta.client.list_objects(Bucket=bucket.name, Delimiter='/', Prefix = "Sample_Folder/"')
for o in res.get('CommonPrefixes'):
print(o.get('Prefix'))