我使用list方法:
all_keys = self.s3_bucket.list(self.s3_path)
存储桶“s3_path”包含文件和文件夹。上述行的返回值令人困惑。它正在回归:
我以为它只会返回文件。
答案 0 :(得分:2)
在Amazon S3中实际上没有文件夹这样的东西。它只是为了方便。即使具有该路径的文件夹不存在,对象也可以存储在给定路径中。对象的键是完整路径加文件名。
例如,即使文件夹不存在,也会复制文件:
aws s3 cp file.txt s3://my-bucket/foo/bar/file.txt
这不会创建/foo/bar
文件夹。它只是创建一个Key为/foo/bar/file.txt
但是,如果在S3管理控制台中创建了文件夹,则会使用文件夹的名称创建零长度文件,以使其显示在控制台中。列出文件时,此将显示为作为目录的名称,但它实际上是零长度文件的名称。
这就是为什么某些目录可能会出现而不是其他目录 - 这取决于它们是否是专门创建的,或者它们是否只是存储在该路径中。
底线: Amazon S3是一个对象存储系统。它实际上只是一个很大的Key / Value存储 - Key是Object的名称,Value是对象的内容。不要认为它与传统文件系统一样。
答案 1 :(得分:0)
如果存储桶中有很多项目,list_objects
的结果将被分页。默认情况下,它最多可返回1000个项目。请参阅Boto docs了解如何使用Marker
来识别所有项目。
哦,看起来你在Boto 2上。对你而言,它将是BucketListResultSet。