Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon RDS实例的Python解析字典输出问题_Python_Amazon Web Services_Boto - Fatal编程技术网

Amazon RDS实例的Python解析字典输出问题

Amazon RDS实例的Python解析字典输出问题,python,amazon-web-services,boto,Python,Amazon Web Services,Boto,我试图用Python解析来自AWS的boto接口的dict输出,它应该能为我提供所有AmazonRDS(数据库)实例的信息。我对这里使用的所有工具都是新手,所以请原谅我的无知 我试图把它当作一个数组来对待,这可能是一个不好的前提,因为它是dict类型。下面的代码可以很好地拉取两(2)个实例,这很奇怪-它至少可以重复一次,我已经通过打印dict输出验证了我在该区域运行的所有四(4)个实例-但它不会拉取输出中的后两个。当我使用len()来测量输出的长度时,它返回2 有人能帮我理解我需要对这段代码做什

我试图用Python解析来自AWS的boto接口的dict输出,它应该能为我提供所有AmazonRDS(数据库)实例的信息。我对这里使用的所有工具都是新手,所以请原谅我的无知

我试图把它当作一个数组来对待,这可能是一个不好的前提,因为它是dict类型。下面的代码可以很好地拉取两(2)个实例,这很奇怪-它至少可以重复一次,我已经通过打印dict输出验证了我在该区域运行的所有四(4)个实例-但它不会拉取输出中的后两个。当我使用len()来测量输出的长度时,它返回2

有人能帮我理解我需要对这段代码做什么才能让它真正解析出所有返回的实例吗?(然后,功能是查找重新启动的允许标记,如果为1,则停止实例…这似乎工作正常,但同样,仅针对返回的前两个结果。)


要确切地说出发生了什么有点困难,特别是因为我们不知道您试图迭代的dict的形状是什么,但看起来您确实感觉到了潜在的问题:您并没有真正以pythonical方式处理此迭代

我查找了输出,发现了以下示例:

{
    "DBInstances": [
        {
            "DBInstanceIdentifier": "mydbinstancecf",
            "DBInstanceClass": "db.t3.small",
            "Engine": "mysql",
            "DBInstanceStatus": "available",
            "MasterUsername": "masterawsuser",
            "Endpoint": {
                "Address": "mydbinstancecf.abcexample.us-east-1.rds.amazonaws.com",
                "Port": 3306,
                "HostedZoneId": "Z2R2ITUGPM61AM"
            },
            ...some output truncated...
        }
    ]
}
因此,您可以通过在
dbinstances

#dbinstances=rds.description_db_instances()
dbinstances=rds.description_db_instances()[“dbinstances”]
现在,您正在处理一组db实例。在PythonFor循环中,将iterarable(list)的每个元素作为变量。在这种情况下,根本不需要维护
dbi
计数器。如果您确实想计算元素,可以在enumerate(我的列表)中对i,e执行此操作:其中
i
是索引,
e
是元素

因此,您的循环变得更像这样:

例如dbinstances中的实例:
#为要分析的标记设置默认值
允许重新启动=0
#我们以后需要这个
尝试:
dbinstanceId=instance['DBInstanceIdentifier']
dbinstanceArn=实例['dbinstanceArn']
rdstags=rds.列出资源的标签(ResourceName=dbinstanceArn)
#     ... 剩下的留给乔希做练习

一般来说,在用Python设计这种算法时,应该大量使用REPL。您可以四处探索并尝试,以快速了解数据的实际结构。

感谢您的详细回复,我将对此进行简要介绍;我使用dbi计数器的原因是,如果我没有指定索引,我会出错,但是如果缩小原始请求的范围将有助于使迭代对循环更加明显,那么可能就没有必要了。如果没有在原始返回值内选择数组,则循环只有一个元素,这是实例列表本身,尽管您希望迭代该列表中的每个元素。谢谢,这起到了作用,还有一个注意事项(这不是我最初查询的一部分):如果资源上有多个标记,则资源的列表标记(arn)需要自己的for循环。这起作用了。谢谢
{
    "DBInstances": [
        {
            "DBInstanceIdentifier": "mydbinstancecf",
            "DBInstanceClass": "db.t3.small",
            "Engine": "mysql",
            "DBInstanceStatus": "available",
            "MasterUsername": "masterawsuser",
            "Endpoint": {
                "Address": "mydbinstancecf.abcexample.us-east-1.rds.amazonaws.com",
                "Port": 3306,
                "HostedZoneId": "Z2R2ITUGPM61AM"
            },
            ...some output truncated...
        }
    ]
}