Python - 在Bucket中列出文件和文件夹

Beg*_*ner 6 python amazon-s3 boto amazon-web-services

我正在玩boto图书馆访问亚马逊s3桶.我试图列出存储桶中给定文件夹中的所有文件和文件夹.我使用它来获取所有文件和文件夹:

for key in bucket.list():
    print key.name
Run Code Online (Sandbox Code Playgroud)

这为我提供了根目录中的所有文件和文件夹,以及它包含文件的子文件夹,如下所示:

root/
 file1
 file2
 folder1/file3
 folder1/file4
 folder1/folder2/file5
 folder1/folder2/file6
Run Code Online (Sandbox Code Playgroud)

我怎样才能列出say的内容folder1,其中列出的内容如下:

files:
 file3
 file4

folders:
 folder2
Run Code Online (Sandbox Code Playgroud)

我可以使用导航到一个文件夹

for key in in bucket.list(prefix=path/to/folder/)
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,它会将文件folder2列为文件,folder1因为我正在尝试在存储桶路径上使用字符串操作.我已经尝试了每个场景,如果有更长的路径,文件夹有多个文件和文件夹(这些文件夹有更多文件),它仍会中断.是否有递归方式来处理这个问题?

gar*_*aat 9

所有信息都是其他答案是正确的,但由于很多人在S3中存储了类似路径的键的对象,API确实提供了一些工具来帮助您处理它们.

例如,在您的情况下,如果您只想列出"子目录" root而不列出下面的所有对象,您将执行此操作:

for key in bucket.list(prefix='root/', delimiter='/'):
    print(key.name)
Run Code Online (Sandbox Code Playgroud)

哪个应产生输出:

file1
file2
folder1/
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

for key in bucket.list(prefix='root/folder1/', delimiter='/'):
    print(key.name)
Run Code Online (Sandbox Code Playgroud)

得到:

file3
file4
folder2/
Run Code Online (Sandbox Code Playgroud)

等等.你可以通过这种方法完成你想要的任务.


Tas*_*lou 2

S3 没有可能想到的“文件夹”概念。它是一个单级层次结构,其中文件按键存储。

如果您需要在文件夹内执行单级列表,则必须在代码中限制列表。就像是if key.count('/')==1