嗨,我有aws s3桶,其中定义了几个文件夹和子文件夹
我只需要在任何文件夹中检索文件名。如何去做
s3桶名- abc路径-S3://abc/ann/folder1 1/folder1 2/folder1 3/file1path-S3:/abc/ann/folder1 1/folder1 2/file2 2
到目前为止尝试过的代码
s3 = boto3.client(s3)
lst_obj = s3.list_objects(bucket='abc',prefix='ann/')
lst_obj["contents"]
我正在进一步循环以获取所有的内容
for file in lst_obj["contents"]:
do somtheing...
这里的文件“Key”给了我整个路径,但是我只需要文件名。
发布于 2020-08-28 12:16:12
您可以通过将文件Key
拆分到/
符号上并提取最后一个元素来提取名称。
for file in lst_obj["contents"]:
name = file["Key"].split("/")[-1]
发布于 2020-08-28 14:58:39
下面是如何获取文件名的示例。
import boto3
s3 = boto3.resource('s3')
for obj in s3.Bucket(name='<your bucket>').objects.filter(Prefix='<prefix>'):
filename = obj.key.split('/')[-1]
print(filename)
发布于 2020-08-28 12:16:23
即使使用前缀,使用列表对象也只是对以特定前缀开头的对象进行筛选。
在S3中,您看到的路径实际上是objects键的一部分,实际上,键(它充当识别对象的元数据)实际上有一个值,包括它们看起来像是子文件夹的值。
如果您想要对象键的最后一部分,则需要用分隔符('/')来拆分键。
您可以使用file['Key'].rsplit(',')[1]
完成此操作,这将为您提供文件名。
https://stackoverflow.com/questions/63640278
复制