【问题标题】:What is the boto3 equivalent of the following AWS CLI command?以下 AWS CLI 命令的 boto3 等效项是什么?
【发布时间】:2020-06-06 06:53:42
【问题描述】:

我正在尝试在 boto3 中编写以下 AWS CLI 命令:

aws s3api list-objects-v2 --bucket bucket --query "Contents[?LastModified>='2020-02-20T17:00:00'] | [?LastModified<='2020-02-20T17:10:00']"

我的目标是能够仅列出指定存储桶中在特定时间间隔内创建的那些 s3 文件。在上面的示例中,当我运行此命令时,它仅返回在 17:00 到 17:10 之间创建的文件。

查看 boto3 文档时,我没有看到与上述命令的“--query”部分类似的任何内容,因此我不确定如何仅返回下降的文件在指定的时间间隔内。

(请注意:列出存储桶中的所有对象并从更大的列表中过滤不是我的选择。对于我的特定用例,有太多文件无法走这条路。 )

如果不存在等效的 boto3,有没有办法通过 Python 脚本启动这个确切的命令?

提前致谢!

【问题讨论】:

  • @NeilMcGuigan 澄清一下,如果不先从存储桶中检索所有对象,有没有办法做到这一点?根据我的说明,这对于我的用例来说不是一个可行的选择。如果 boto3 不允许 --query 部分,我如何才能从 Python 运行 CLI 命令?
  • 你可以使用subprocess.check_call
  • boto3 中不存在--query 等效项的原因是这是一个客户端过滤器,对list-objects-v2 调用的结果执行。它不会发生在服务器端。您可以通过过滤结果在客户端实现它,就像 awscli 一样。

标签: amazon-web-services amazon-s3 aws-lambda boto3 aws-cli


【解决方案1】:

boto3 没有与之等效的。但是s3pathlib 解决了你的问题。 这里的代码 sn-p 可以解决您的问题

from datetime import datetime
from s3pathlib import S3path

# define a bucket
p_bucket = S3Path("bucket")

# filter by last modified
for p in p_bucket.iter_objects().filter(
    # any Filterable attribute can be used for filtering
    S3Path.last_modified_at.between( 
        datetime(2000,1,1),
        datetime(2020,1,1),
    )
):
    # do what ever you like
    print(p.console_url) # click link to open it in console, inspect results

如果您想使用其他S3Path 属性进行过滤,并使用其他比较器,甚至定义您的自定义过滤器,您可以按照此document

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 2019-03-19
    • 1970-01-01
    相关资源
    最近更新 更多