AWS boto3 page_iterator.search不能将datetime.datetime与字符串进行比较 [英] AWS boto3 page_iterator.search can't compare datetime.datetime to str

查看:25
本文介绍了AWS boto3 page_iterator.search不能将datetime.datetime与字符串进行比较的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

正在尝试捕获位于S3上的增量文件(上次处理后创建的文件)。为此,请使用boto3过滤迭代器by query LastModified value,而不是返回所有文件列表并在客户端站点上进行筛选。

根据http://jmespath.org/?,以下查询有效,过滤如下json响应;

filtered_iterator = page_iterator.search(
"Contents[?LastModified>='datetime.datetime(2016, 12, 27, 8, 5, 37, tzinfo=tzutc())'].Key")

for key_data in filtered_iterator:
print(key_data)

但是,失败的原因是;

RuntimeError: xxxxxxx has failed: can't compare datetime.datetime to str

分页器响应示例;

{
"Contents": [{
    "LastModified": "datetime.datetime(2016, 12, 28, 8, 5, 31, tzinfo=tzutc())",
    "ETag": "1022dad2540da33c35aba123476a4622",
    "StorageClass": "STANDARD",
    "Key": "blah1/blah11/abc.json",
    "Owner": {
        "DisplayName": "App-AWS",
        "ID": "bfc77ae78cf43fd1b19f24f99998cb86d6fd8220dbfce0ce6a98776253646656"
    },
    "Size": 623
}, {
    "LastModified": "datetime.datetime(2016, 12, 28, 8, 5, 37, tzinfo=tzutc())",
    "ETag": "1022dad2540da33c35abacd376a44444",
    "StorageClass": "STANDARD",
    "Key": "blah2/blah22/xyz.json",
    "Owner": {
        "DisplayName": "App-AWS",
        "ID": "bfc77ae78cf43fd1b19f24f99998cb86d6fd8220dbfce0ce6a81234e632c5a8c"
    },
    "Size": 702
}
]
}

推荐答案

Boto3Jmespath实现不支持日期筛选(它将在您的示例中将它们标记为不兼容的类型"unicode"和"datetime")。但是,通过Amazon解析日期的方式,您可以使用Jmespath的to_string()方法对它们进行词法比较。

如下所示:

"Contents[?to_string(LastModified)>='"2015-01-01 01:01:01+00:00"']"

但请记住,这是一个词汇比较,而不是日期比较。不过,大多数情况下都是有效的。

这篇关于AWS boto3 page_iterator.search不能将datetime.datetime与字符串进行比较的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆