将boto3输出转换为方便的格式

时间:2017-05-09 17:02:25

标签: python datetime boto3

我使用boto3中的describe_snapshots函数获得以下输出

  

你' StartTime':datetime.datetime(2017,4,7,4,21,42,tzinfo = tzutc())

我希望将其转换为正确的日期,以便我可以继续对快照进行排序并删除超过特定天数的快照。

是否有可用于实现此功能的python功能?

3 个答案:

答案 0 :(得分:1)

这几乎肯定是您需要的格式。 datetime对象很容易比较/可排序。例如:

from datetime import datetime

import boto3


ec2 = boto3.client('ec2')
account_id = 'MY_ACCOUNT_ID'
response = ec2.describe_snapshots(OwnerIds=[account_id])
snapshots = response['Snapshots']

# January 1st, 2017
target_date = datetime(2017, 01, 01)

# Get the snapshots older than the target date
old_snapshots = [s for s in snapshots if s['StartTime'] < target_date]

# Sort the old snapshots
old_snapshots = sorted(old_snapshots, key=lambda s: s['StartTime'])

docs:https://docs.python.org/3.6/library/datetime.html

答案 1 :(得分:1)

这篇文章真的很晚,但我最近遇到了这个问题。我假设您是通过手/眼比较日期与以编程方式比较日期时间对象。或者您正在调试并且只想以人类可读的格式查看 json 对象中的日期/时间。

我发现 aws aha samples 中的转换器运行良好。

def myconverter(json_object):
    if isinstance(json_object, datetime.datetime):
        return json_object.__str__()

从那里您可以将原始事件/消息从 boto 传递到 json.dump 并返回转换后的 json 字符串

In [34]: print(json_msg)
{'arn': 'arn:aws:service:region::X', 'service': 'SERVICE', 'eventTypeCode': 'SOME_CODE', 'eventTypeCategory': 'CAT', 'eventScopeCode': 'SCOPE', 'region': 'us-east-1', 'startTime': datetime.datetime(YYYY, MM, DD, HH, MM, tzinfo=tzlocal()), 'endTime': datetime.datetime(YYYY, MM, DD, HH, MM, tzinfo=tzlocal()), 'lastUpdatedTime': datetime.datetime(YYYY, MM, DD, HH, MM, SS, tzinfo=tzlocal()), 'statusCode': 'CODE' }

In [35]: json_msg = json.dumps(json_event, default=myconverter)

In [36]: print(json_event)
{'arn': 'arn:aws:service:region::X', 'service': 'SERVICE', 'eventTypeCode': 'SOME_CODE', 'eventTypeCategory': 'CAT', 'eventScopeCode': 'SCOPE', 'region': 'us-east-1', 'startTime': "YYYY-MM-DD HH:MM:SS-OH:OS", 'endTime': "YYYY-MM-DD HH:MM:SS-OH:OS", 'lastUpdatedTime': "YYYY-MM-DD HH:MM:SS-OH:OS" , 'statusCode': 'CODE' }

答案 2 :(得分:-2)

可能需要更多来自您的代码 - 但看起来您似乎是以这种方式输出的代码(或者您默认使用的代码)

aws返回以下格式:

<startTime>YYYY-MM-DDTHH:MM:SS.SSSZ</startTime>

所以我猜你是在某个地方使用datetime.datetime()而不是日期字段上的其他东西? (https://docs.python.org/2/library/datetime.html