大家好,大家好,我正在学习python,目前我正在为ec2做一些作业,boto3连接到实例并通过python3启动t2微实例,下面是给出输出的小代码
import boto3
ec2 = boto3.client('ec2')
# Retrieves all regions/endpoints that work with EC2
response = ec2.describe_regions()
print('Regions:', response['Regions'])代码是从这里取来的-- https://boto3.readthedocs.io/en/stable/guide/ec2-example-regions-avail-zones.html,这给了我以下输出
Regions:
[
{'Endpoint': 'ec2.ap-south-1.amazonaws.com', 'RegionName': 'ap-south-1'},
{'Endpoint': 'ec2.eu-west-3.amazonaws.com', 'RegionName': 'eu-west-3'},
{'Endpoint': 'ec2.eu-west-2.amazonaws.com', 'RegionName': 'eu-west-2'},
{'Endpoint': 'ec2.eu-west-1.amazonaws.com', 'RegionName': 'eu-west-1'},
{'Endpoint': 'ec2.ap-northeast-2.amazonaws.com', 'RegionName': 'ap-northeast-2'},
{'Endpoint': 'ec2.ap-northeast-1.amazonaws.com', 'RegionName': 'ap-northeast-1'},
{'Endpoint': 'ec2.sa-east-1.amazonaws.com', 'RegionName': 'sa-east-1'},
{'Endpoint': 'ec2.ca-central-1.amazonaws.com', 'RegionName': 'ca-central-1'},
{'Endpoint': 'ec2.ap-southeast-1.amazonaws.com', 'RegionName': 'ap-southeast-1'},
{'Endpoint': 'ec2.ap-southeast-2.amazonaws.com', 'RegionName': 'ap-southeast-2'},
{'Endpoint': 'ec2.eu-central-1.amazonaws.com', 'RegionName': 'eu-central-1'},
{'Endpoint': 'ec2.us-east-1.amazonaws.com', 'RegionName': 'us-east-1'},
{'Endpoint': 'ec2.us-east-2.amazonaws.com', 'RegionName': 'us-east-2'},
{'Endpoint': 'ec2.us-west-1.amazonaws.com', 'RegionName': 'us-west-1'},
{'Endpoint': 'ec2.us-west-2.amazonaws.com', 'RegionName': 'us-west-2'}
]我要做的是,在字典中逐个打印由函数ec2.describe_regions()返回的值。
print (response[0],response[1],response[2]) 但这给了我关键错误
describe_regions2.py", line 9, in <module>
print (response[0])
KeyError: 0如果我做了一个
print (response['Endpoint'])那我也会犯错误
describe_regions2.py", line 9, in <module>
print (response['Endpoint'])
KeyError: 'Endpoint'
>>> 如何获得ec2.describe_regions()的各个元素--我在这里阅读了文档regions,它在使用print(response)时给出了预期的输出。
这里,我只想从字典中返回几个想要的元素,而不是所有的输出。这就是我无法在代码中得到的。如果我用
print (response['Regions'][0]['Endpoint'])我得到了
ec2.ap-south-1.amazonaws.com如果我用
print (response['Regions'][0])我得到了{'Endpoint': 'ec2.ap-south-1.amazonaws.com', 'RegionName': 'ap-south-1'}
我尝试过的新代码是
import boto3
ec2 = boto3.client('ec2')
# Retrieves all regions/endpoints that work with EC2
response = ec2.describe_regions()
c=0
#print('Regions:', response['Regions'])
#for i in response:
# print ("i= ",i+" response[i]=",response[i])
# print ("\n")
print ("\nhale luliya\n")
print ("Endpoint="+response['Regions'][0]['Endpoint'])
print ("RegionName="+response['Regions'][0]['RegionName'])
print ("Full response for list[0]"+response['Regions'][0])最后一个print语句会出现错误。
\describe_regions2.py", line 15, in <module>
print ("Full response for list[0]"+response['Regions'][0])
TypeError: can only concatenate str (not "dict") to str如何对响应于for loop.To的整个列表进行迭代,只打印所需的值?我能做到
for key,value in response['Regions'][0].items():
print(key,value)这给了我
Endpoint ec2.ap-south-1.amazonaws.com
RegionName ap-south-1这个问题现在解决了,在这里更新这里的复杂性是因为print(type(response['Regions']))给出了<class 'list'>,print(type(response['Regions']))是<class 'dict'>,并且
print (type(response))是<class 'dict'>,所以字典也在字典中返回,一个列表和另一个字典被返回。所以我不能understand.Output
for data in response['Regions']:
print(data)
for key,value in response['ResponseMetadata'].items():
print(key,value)帮助我理解了被归还的东西
{'Endpoint': 'ec2.ap-south-1.amazonaws.com', 'RegionName': 'ap-south-1'}
{'Endpoint': 'ec2.eu-west-3.amazonaws.com', 'RegionName': 'eu-west-3'}
{'Endpoint': 'ec2.eu-west-2.amazonaws.com', 'RegionName': 'eu-west-2'}
{'Endpoint': 'ec2.eu-west-1.amazonaws.com', 'RegionName': 'eu-west-1'}
{'Endpoint': 'ec2.ap-northeast-2.amazonaws.com', 'RegionName': 'ap-northeast-2'}
{'Endpoint': 'ec2.ap-northeast-1.amazonaws.com', 'RegionName': 'ap-northeast-1'}
{'Endpoint': 'ec2.sa-east-1.amazonaws.com', 'RegionName': 'sa-east-1'}
{'Endpoint': 'ec2.ca-central-1.amazonaws.com', 'RegionName': 'ca-central-1'}
{'Endpoint': 'ec2.ap-southeast-1.amazonaws.com', 'RegionName': 'ap-southeast-1'}
{'Endpoint': 'ec2.ap-southeast-2.amazonaws.com', 'RegionName': 'ap-southeast-2'}
{'Endpoint': 'ec2.eu-central-1.amazonaws.com', 'RegionName': 'eu-central-1'}
{'Endpoint': 'ec2.us-east-1.amazonaws.com', 'RegionName': 'us-east-1'}
{'Endpoint': 'ec2.us-east-2.amazonaws.com', 'RegionName': 'us-east-2'}
{'Endpoint': 'ec2.us-west-1.amazonaws.com', 'RegionName': 'us-west-1'}
{'Endpoint': 'ec2.us-west-2.amazonaws.com', 'RegionName': 'us-west-2'}
RequestId 221d8d0f-908f-4996-8c88-87b00c5da592
HTTPStatusCode 200
HTTPHeaders {'content-type': 'text/xml;charset=UTF-8', 'content-length': '2559', 'vary': 'Accept-Encoding', 'date': 'Sun, 19 Aug 2018 06:20:40 GMT', 'server': 'AmazonEC2'}
RetryAttempts 0发布于 2018-08-19 05:43:48
您所面临的问题可以通过使用以下简单步骤进行调试。
每当您得到响应时,请执行print(type(response))
str,那么就意味着您需要使用python自己的json库转换为json。list,则可以通过索引(如response[0], response[1] )或循环访问它。dict,则可以通过名称(如response['Endpoint'] )访问它。通常,在处理api数据时,需要遵循上述步骤。您可能会得到嵌套级别的结果,如字典列表列表、字典列表字典,或者可以转换为json的普通字符串。
更新:您可以在字典上迭代,如下所示:
data = {'Endpoint': 'ec2.ap-south-1.amazonaws.com', 'RegionName': 'ap-south-1'}
for key,value in data.items():
print(key , value)https://stackoverflow.com/questions/51914646
复制相似问题