模块boto的list()方法中的问题

时间:2017-07-27 12:02:59

标签: python amazon-s3 boto

我使用list方法:

all_keys = self.s3_bucket.list(self.s3_path)

存储桶“s3_path”包含文件和文件夹。上述行的返回值令人困惑。它正在回归:

  1. 父目录
  2. 一些目录不是全部
  3. 文件夹和子文件夹中的所有文件。
  4. 我以为它只会返回文件。

2 个答案:

答案 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