2017-04-06 10 views
0

に辞書データにアクセスすることはできません私はboto3を使用している、と私は、このループを実行した:がboto3

for i in x["Instances"] 
    print(i) 

それから私は得る:

{ 
    'AmiLaunchIndex': 0, 
    'Hypervisor': 'xen', 
    'VpcId': 'vpc-a790ac1', 
    'Architecture': 'x86_64', 
    'InstanceId': 'i-0bab3fb8314', 
    'PrivateDnsName': 'ip-10-c2.internal', 
    'BlockDeviceMappings': [{ 
     'Ebs': { 
      'DeleteOnTermination': True, 
      'AttachTime': datetime.datetime(2017, 4, 4, 20, 44, 27, tzinfo = tzutc()), 
      'VolumeId': 'vol-07fd506f45', 
      'Status': 'attached' 
     }, 
     'DeviceName': '/dev/xvda' 
    }, { 
     'Ebs': { 
      'DeleteOnTermination': False, 
      'AttachTime': datetime.datetime(2017, 4, 6, 1, 12, 45, tzinfo = tzutc()), 
      'VolumeId': 'vol-01ef36c45', 
      'Status': 'attached' 
     }, 
     'DeviceName': '/dev/sdf' 
    }], 
    'RootDeviceName': '/dev/xvda', 
    'InstanceType': 't2.micro', 
    'EnaSupport': True, 
    'ClientToken': 'ODrMT1465413', 
    'EbsOptimized': False, 
    'SubnetId': 'subnet-fb1a4', 
    'Monitoring': { 
     'State': 'disabled' 
    }, 
    'PublicDnsName': '', 
    'StateTransitionReason': 'User initiated (2017-04-06 01:15:22 GMT)', 
    'PrivateIpAddress': '10.10.4.116', 
    'RootDeviceType': 'ebs', 
    'Tags': [{ 
     'Value': 'wp2', 
     'Key': 'Name' 
    }, { 
     'Value': 'true', 
     'Key': 'backup' 
    }], 
    'ImageId': 'ami-0976f01f', 
    'StateReason': { 
     'Code': 'Client.UserInitiadShutdown', 
     'Message': 'Client.UserInitiatedShutdown: User initiated shutdown' 
    }, 
    'KeyName': 'pair2', 
    'ProductCodes': [], 
    'State': { 
     'Name': 'stopped', 
     'Code': 80 
    }, 
    'LaunchTime': datetime.datetime(2017, 4, 6, 1, 13, 1, tzinfo = tzutc()), 
    'Placement': { 
     'AvailabilityZone': 'us-east-1b', 
     'GroupName': '', 
     'Tenancy': 'default' 
    }, 
    'SourceDestCheck': True, 
    'NetworkInterfaces': [{ 
     'Description': 'Primary network interface', 
     'PrivateIpAddress': '10.10.4.116', 
     'PrivateIpAddresses': [{ 
      'Primary': True, 
      'PrivateIpAddress': '10.10.4.116' 
     }], 
     'Status': 'in-use', 
     'SubnetId': 'subnet-ffbcba4', 
     'VpcId': 'vpc-a790a7c1', 
     'Attachment': { 
      'DeleteOnTermination': True, 
      'AttachTime': datetime.datetime(2017, 4, 4, 20, 44, 26, tzinfo = tzutc()), 
      'DeviceIndex': 0, 
      'AttachmentId': 'eni-attach-c8398', 
      'Status': 'attached' 
     }, 
     'Ipv6Addresses': [], 
     'OwnerId': '895548', 
     'MacAddress': '0e:31:4c4:b6', 
     'Groups': [{ 
      'GroupId': 'sg-26c59', 
      'GroupName': 'web-dmz' 
     }], 
     'NetworkInterfaceId': 'eni-5383', 
     'SourceDestCheck': True 
    }], 
    'SecurityGroups': [{ 
     'GroupId': 'sg-2cab59', 
     'GroupName': 'web-dmz' 
    }], 
    'VirtualizationType': 'hvm' 
} 

I「のボリュームIDにアクセスしようとしています

for x in ["BlockDeviceMappings"][0]["Ebs"]["VolumeId"]: 
    print(x) 

は私がTypeError: string indices must be integers

を得る: 'のようなものを使用して

'BlockDeviceMappings'は辞書が入ったリストとして開始されますが、 'VolumeId'にはアクセスできません。

私も試してみた:

for x in ["BlockDeviceMappings"][0]: 
    for k,v in ["Ebs"]: 
     print(v) 

をそして私が手:

ValueError: too many values to unpack (expected 2) 

そして、私が試した: 'EBS' 数回印刷し

for x in ["BlockDeviceMappings"][0]: 
    for v in ["Ebs"]: 
     print(v) 

誰かが正しい方向に向いていますか?

答えて

0

ボリュームIDが

print x["Instances"][0]["BlockDeviceMappings"][0]["Ebs"]["VolumeId"] 

を使用してください、あなただけ逃しxまたは_取得します。 ["BlockDeviceMappings"] [0]が "B"に評価されているため、エラーが発生しています。 ですから、すべてのボリュームを取得するには、「B」

から取得「オーブ」をしよう:

for i in x["Instances"]: 
    for b in i["BlockDeviceMappings"] 
     print b["Ebs"]["VolumeId"] 

あなたは、多くの場合、そのような複雑なsturcturesからデータを抽出する必要がある場合は、github.comのようないくつかの風変わりな検索ライブラリを試してみてください/ akesterson/dpath-python、それはちょうどキーワードを使用してデータを抽出することができます

+0

ありがとう、しかし、それは私に最初のボリュームを取得します。それ以上あればそれをスキップします。それは私がおそらくよく説明しなかった主な問題です。 – SO03112

+0

それはそれをしました。ありがとう! – SO03112

+0

いつでも、残念ながら、コンピュータは前の行でそれを言及したとしても、必要な配列や辞書を推測します...ある日、AIや言語のデザイナーが、 – Serge