【问题标题】:Best way to get all subdirectories containing a file in s3 using python and boto使用python和boto获取s3中包含文件的所有子目录的最佳方法
【发布时间】:2023-03-23 18:14:01
【问题描述】:

有没有办法在 s3 中的存储桶上进行通配符搜索?使用python和boto。 我需要复制包含特定文件的所有子目录,最好的方法是什么?

【问题讨论】:

  • S3 不支持搜索文件名,而且它在技术上也没有目录(前缀不是目录,S3 是平面对象存储)。您将需要迭代存储桶中的每个对象并在客户端进行自己的过滤。

标签: python python-2.7 amazon-web-services amazon-s3 boto


【解决方案1】:

list_buckets_v2() 命令不接受通配符。

最接近的选项是传递PrefixDelimiter 的能力,这就像在特定的子目录中查找一样有效。

您需要编写自己的逻辑来确定要复制的对象(不是目录)。如果您希望复制整个子目录,代码将需要遍历该路径中的每个对象并单独复制该对象。

如果您的要求是“复制包含特定文件的所有子目录”,您需要:

  • 通过列出所有对象进行第一次遍历
  • 遍历对象键(文件名),在键的末尾(从最后一个斜杠 (/) 开始)查找所需的文件名
  • 如果找到文件名,将前缀(每个直到最后一个斜杠)添加到列表中
  • 对于添加到列表中的每个路径,执行另一个 list_objects_v2(),将路径作为前缀传递,然后为每个对象调用 copy_object() 命令

(您只需调用一次list_objects_v2() 即可实现上述目的,但上述方法在逻辑上更简单。您的选择。)

【讨论】:

  • 性能注意事项 - 使用 / 分隔符查询 / 前缀将返回所有顶级对象和前缀,但在服务器端,这必须扫描桶,使这些类型的请求变慢。
猜你喜欢
  • 2019-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-04
  • 2014-11-10
  • 2021-03-22
相关资源
最近更新 更多