由于我不懂python或boto,所以我的回答可能不完整,但我想评论一下问题中的基本概念。
其他帖子中的其中一个作者是正确的:S3没有目录的概念。只有扁平的键/值对。许多应用程序假装某些分隔符指示目录条目。例如“ / ”或“ \ ”。有些应用甚至会放置一个虚拟文件,以便如果“目录”为空,您仍然可以在列表结果中看到它。
您并不总是必须将整个存储桶下载并在本地进行过滤。S3具有有限列表的概念,在其中指定您认为的路径分隔符(“ / ”、“ \ ”、“ | ”、“ foobar ”等),S3将向您返回虚拟结果,类似于您想要的结果。
http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html (请查看分隔符标头。)
此API将获取您的一个目录层级。因此,如果您的示例中有:
mybucket/files/pdf/abc.pdf
mybucket/files/pdf/abc2.pdf
mybucket/files/pdf/abc3.pdf
mybucket/files/pdf/abc4.pdf
mybucket/files/pdf/new/
mybucket/files/pdf/new/abc.pdf
mybucket/files/pdf/2011/
如果您传入一个前缀为“”且分隔符为“/”的列表,您将获得以下结果:
mybucket/files/
如果您传入一个包含前缀"mybucket/files/"和分隔符"/"的列表,您将获得以下结果:
mybucket/files/pdf/
如果您传递了一个带有前缀 "mybucket/files/pdf/" 和分隔符 "/" 的列表,您将得到以下结果:
mybucket/files/pdf/abc.pdf
mybucket/files/pdf/abc2.pdf
mybucket/files/pdf/abc3.pdf
mybucket/files/pdf/abc4.pdf
mybucket/files/pdf/new/
mybucket/files/pdf/2011/
如果你想要从结果集中删除PDF文件本身,那么此时你将需要自己处理。
至于如何在Python/Boto中实现这一点,我不清楚。希望有办法可以解决。