我使用列表方法:
all_keys = self.s3_bucket.list(self.s3_path)
存储桶“s3_path”包含文件和文件夹。上面一行的返回值令人困惑。它正在返回:
- 父目录
- 一些目录,并非全部
- 文件夹和子文件夹中的所有文件。
我原以为它只会返回文件。
最佳答案
Amazon S3 中实际上不存在文件夹这样的东西。它只是为了方便而提供的。即使具有该路径的文件夹不存在,对象也可以存储在给定路径中。对象的键是完整路径加文件名。
例如,即使文件夹不存在,这也会复制文件:
aws s3 cp file.txt s3://my-bucket/foo/bar/file.txt
这不会创建 /foo/bar
文件夹。它只是创建一个带有 Key 的对象: /foo/bar/file.txt
但是,如果在 S3 管理控制台中创建文件夹,则会使用该文件夹的名称创建一个零长度文件,以便它显示在控制台中。列出文件时,此将显示为目录名称,但它实际上是零长度文件的名称。
这就是为什么某些目录可能出现但其他目录不出现的原因 - 这取决于它们是否是专门创建的,或者它们的对象是否只是存储在该路径中。
底线:Amazon S3 是一个对象存储系统。它实际上只是一个大的键/值存储——键是对象的名称,值是对象的内容。不要假设它与传统文件系统的工作方式相同。
关于python - boto 模块的 list() 方法中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45350264/