python - 在python中对日期对象进行排序列出了不正确的顺序
问题描述
所以我有我的 python 脚本,它列出了关于每个 ec2 实例的报告。我有一个函数可以对实例的 networkattatchtime 进行排序,但是每次我使用 stftime 来格式化日期的输出时,它似乎会弄乱排序并以随机顺序列出实例,而不是按最旧的 CreationDateTime。我得到的输出如下:
i-09dc54328002240ff,Aug 05 2021,asg-workxxx
i-048e92c5a4741d2b1,Mar 09 2017,False
i-0d649cebdf54bd2f4,Mar 12 2020,asg-dyyyyy
i-0ff596f1dc01b61d8,Mar 17 2021,asg-base-test
i-06db4eb158ad0b071,May 12 2021,False
i-0f285277529543462,May 18 2018,False
i-0f67cf99fb9f96c3f,Oct 14 2020,asg-elk-test
i-01734dfef0159c5c8,Oct 20 2020,asg-lb-test
i-0539c8dfc839cbfda,Oct 26 2020,asg-stand-base-test
您可以看到 CreationDateTime 未按排序顺序。
我的代码如下:
response = ec2_client.describe_instances(
MaxResults=10
)
# return json data from describe instances and filter what is needed
instances = (len(response['Reservations']))
header_row = 'InstanceID, CreationDateTime, AutoScalingGroupName' + '\n'
for x in range(instances):
# Get InstanceId
instance_id = (response['Reservations'][x]
['Instances'][0]['InstanceId'])
# Get NetworkInterfacws AttatchTime
network_interface_id = (
response['Reservations'][x]['Instances'][0]['NetworkInterfaces'][0]['NetworkInterfaceId'])
network_interface_details = ec2_client.describe_network_interfaces(
NetworkInterfaceIds=[network_interface_id])
networkinterface_id_attachedtime = network_interface_details[
'NetworkInterfaces'][0]['Attachment']['AttachTime']
time_between_insertion = datetime.now(
timezone.utc) - networkinterface_id_attachedtime
# Get Autoscaling GroupName
tags = (response['Reservations'][x]['Instances'][0]['Tags'])
autoscaling_group_name = get_tag(tags, 'aws:autoscaling:groupName')
# print results
if time_between_insertion.days > max_age:
line = '{},{},{}'.format(
instance_id, formatted_date_networkinterface_id, autoscaling_group_name)
instances_list.append(line)
sorted_list= sorted(instances_list, key=lambda v: v.split(',')[1])
for instance in sorted_list:
print(instance) ```
解决方案
要解析日期,您可以使用datetime.datetime.strptime
:
import datetime # strptime
import operator # itemgetter
data_unparsed = ['i-09dc54328002240ff,Aug 05 2021,asg-workxxx',
'i-048e92c5a4741d2b1,Mar 09 2017,False',
'i-0d649cebdf54bd2f4,Mar 12 2020,asg-dyyyyy',
'i-0ff596f1dc01b61d8,Mar 17 2021,asg-base-test',
'i-06db4eb158ad0b071,May 12 2021,False',
'i-0f285277529543462,May 18 2018,False',
'i-0f67cf99fb9f96c3f,Oct 14 2020,asg-elk-test',
'i-01734dfef0159c5c8,Oct 20 2020,asg-lb-test',
'i-0539c8dfc839cbfda,Oct 26 2020,asg-stand-base-test']
data = [((row := s.split(','))[0], datetime.datetime.strptime(row[1], '%b %d %Y'), row[2]) for s in data_unparsed]
data_sorted = sorted(data, key=operator.itemgetter(1))
print(data_sorted)
# [('i-048e92c5a4741d2b1', datetime.datetime(2017, 3, 9, 0, 0), 'False'),
# ('i-0f285277529543462', datetime.datetime(2018, 5, 18, 0, 0), 'False'),
# ('i-0d649cebdf54bd2f4', datetime.datetime(2020, 3, 12, 0, 0), 'asg-dyyyyy'),
# ('i-0f67cf99fb9f96c3f', datetime.datetime(2020, 10, 14, 0, 0), 'asg-elk-test'),
# ('i-01734dfef0159c5c8', datetime.datetime(2020, 10, 20, 0, 0), 'asg-lb-test'),
# ('i-0539c8dfc839cbfda', datetime.datetime(2020, 10, 26, 0, 0), 'asg-stand-base-test'),
# ('i-0ff596f1dc01b61d8', datetime.datetime(2021, 3, 17, 0, 0), 'asg-base-test'),
# ('i-06db4eb158ad0b071', datetime.datetime(2021, 5, 12, 0, 0), 'False'),
# ('i-09dc54328002240ff', datetime.datetime(2021, 8, 5, 0, 0), 'asg-workxxx')]
或者,作为单线:
data_sorted = sorted(data_unparsed, key=lambda s: datetime.datetime.strptime(s.split(',')[1], '%b %d %Y'))
print(data_sorted)
# ['i-048e92c5a4741d2b1,Mar 09 2017,False',
# 'i-0f285277529543462,May 18 2018,False',
# 'i-0d649cebdf54bd2f4,Mar 12 2020,asg-dyyyyy',
# 'i-0f67cf99fb9f96c3f,Oct 14 2020,asg-elk-test',
# 'i-01734dfef0159c5c8,Oct 20 2020,asg-lb-test',
# 'i-0539c8dfc839cbfda,Oct 26 2020,asg-stand-base-test',
# 'i-0ff596f1dc01b61d8,Mar 17 2021,asg-base-test',
# 'i-06db4eb158ad0b071,May 12 2021,False',
# 'i-09dc54328002240ff,Aug 05 2021,asg-workxxx']
相关文件:
推荐阅读
- google-chrome - Keycloak:使用新的 Chrome SameSite/Secure cookie 强制执行的令牌请求中缺少会话 cookie
- javascript - 如何在 Chart.js 中绘制线性回归线
- powershell - 如何在 Powershell 中从 S3 过滤和下载文件
- javascript - 从 JSON 数据构建树
- google-sheets - 基于另一个元素列表的条件格式
- c# - 确定 ASP.Net Core webapp 是否在 localhost 上运行
- directory - 具有扩展和不同数量参数的 Snakemake 输出
- spring - 如何处理弹簧云蒸汽反应中的背压
- python - 来自端点的响应
- php - 不正确的 Ajax 响应