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

标签 python amazon-s3 boto

我使用列表方法:

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

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

  1. 父目录
  2. 一些目录,并非全部
  3. 文件夹和子文件夹中的所有文件。

我原以为它只会返回文件。

最佳答案

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/

相关文章:

python - 将元组添加到作为键字典

python - 为什么这个 Python 半正矢公式会产生错误的答案?

django - '可疑操作: Attempted access to "" denied' while loading static files

python - AWS 上多个 API 之间的共享 Python 库

python - 无法终止 Chrome 进程并使用 ChromeDriver 和 Chrome 通过 Python 中的 Selenium 运行内存不足

amazon-web-services - 为什么 AWS Lambda CFN S3 响应在删除事件时返回 403?

scala - 尝试使用本地 Spark 从 s3 读取和写入 Parquet 文件

python - 不一致的 SignatureDoesNotMatch Amazon S3 与 django-pipeline、s3boto 和存储

python - 在 AWS SQS 队列中连续读取数据

python - 没有名为 'atom' 的模块