我从我的AWS账户中提取AMI ID列表并将其写入json文件。 json看起来基本上是这样的:
{
"Images": [
{
"CreationDate": "2017-11-24T11:05:32.000Z",
"ImageId": "ami-XXXXXXXX"
},
{
"CreationDate": "2017-11-24T11:05:32.000Z",
"ImageId": "ami-aaaaaaaa"
},
{
"CreationDate": "2017-10-24T11:05:32.000Z",
"ImageId": "ami-bbbbbbb"
},
{
"CreationDate": "2017-10-24T11:05:32.000Z",
"ImageId": "ami-cccccccc"
},
{
"CreationDate": "2017-12-24T11:05:32.000Z",
"ImageId": "ami-ddddddd"
},
{
"CreationDate": "2017-12-24T11:05:32.000Z",
"ImageId": "ami-eeeeeeee"
}
]
}
在收集信息并将其写入本地的.json文件后,我的代码到目前为止看起来像这样:
#writes json output to file...
print('writing to response.json...')
with open('response.json', 'w') as outfile:
json.dump(response, outfile, ensure_ascii=False, indent=4, sort_keys=True, separators=(',', ': '))
#Searches file...
print('opening response.json...')
with open("response.json") as f:
file_parsed = json.load(f)
接下来我要介绍的是如何遍历文件并仅打印CreationDate和ImageId值。
print('printing CreationDate and ImageId...')
for ami in file_parsed['Images']:
#print ami['CreationDate'] #THIS WORKS
#print ami['ImageId'] #THIS WORKS
#print ami['CreationDate']['ImageId']
无论我如何尝试,最后一行都给了我: TypeError:字符串索引必须是整数
我想要的输出是这样的:
2017-11-24T11:05:32.000Z ami-XXXXXXXX
最终我要做的是迭代特定日期或更早的行,并注销那些AMI。那么我会将这些转换为列表或词典吗? 几乎不是这里的程序员所以不要淹死我。 TIA
答案 0 :(得分:1)
您几乎已经解析了json,但是对于所需的输出,您需要连接' CreationDate'和#ImageId'像这样:
for ami in file_parsed['Images']:
print(ami['CreationDate'] + " "+ ami['ImageId'])
答案 1 :(得分:0)
CreationDate
计算为字符串。因此,您只能获取字符串的数字索引,这就是['CreationDate']['ImageId']
导致TypeError的原因。但是,你的其他两条注释行是正确的。
要检查日期是否较旧,您可以使用datetime
模块。例如,您可以使用CreationDate(这是一个字符串),将其转换为datetime
对象,根据特定日期创建自己的对象,并比较两者。
有这样的效果:
def checkIfOlder(isoformat, targetDate):
dateAsString = datetime.strptime(isoformat, '%Y-%m-%dT%H:%M:%S.%fZ')
return dateAsString <= targetDate
certainDate = datetime(2017, 11, 30) # Or whichever date you want
所以在你的for
循环中:
for ami in file_parsed['Images']:
creationDate = ami['CreationDate']
if checkIfOlder(creationDate, certainDate):
pass # write code to deregister AMIs here
有益的资源是Python's datetime documentation,特别是strftime/strptime directives。 HTH!