使用Python获取ECS相关信息2
上一次我们已经知道如何用python获取ECS信息了,不知道的可以点这里
1.返回数据格式
通过上回的代码,我们将会获得如下的数据(json格式)
{"PageNumber":1,"TotalCount":1,"PageSize":10,"RequestId":"CF15510B-9510-4E04-939B-F48C453D0E62","Instances":{"Instance":[{"ImageId":"centos_7_04_64_20G_alibase_201701015.vhd","VlanId":"","EipAddress":{"IpAddress":"","AllocationId":"","InternetChargeType":""},"ZoneId":"cn-shanghai-b","IoOptimized":true,"SerialNumber":"41b2b827-014b-4723-bcdf-a5764c9d1c2e","Cpu":1,"Memory":2048,"DeviceAvailable":true,"SecurityGroupIds":{"SecurityGroupId":["sg-uf6fq26zc62t0u0t8ftr"]},"SaleCycle":"","AutoReleaseTime":"","OSType":"linux","ResourceGroupId":"","OSName":"CentOS 7.4 64位","InstanceNetworkType":"vpc","HostName":"aliyun-sh","CreationTime":"2018-12-05T06:51Z","RegionId":"cn-shanghai","DeletionProtection":false,"OperationLocks":{"LockReason":[]},"ExpiredTime":"2019-06-05T16:00Z","InnerIpAddress":{"IpAddress":[]},"InstanceTypeFamily":"ecs.n4","InstanceId":"i-uf6gchn2j65r5scbn6rz","NetworkInterfaces":{"NetworkInterface":[{"MacAddress":"00:16:3e:02:0e:a2","PrimaryIpAddress":"172.19.214.188","NetworkInterfaceId":"eni-uf68mu7aigxbcs3huv90"}]},"InternetMaxBandwidthIn":500,"CreditSpecification":"","InternetChargeType":"PayByBandwidth","SpotStrategy":"NoSpot","StoppedMode":"Not-applicable","InternetMaxBandwidthOut":1,"VpcAttributes":{"NatIpAddress":"","PrivateIpAddress":{"IpAddress":["172.19.214.188"]},"VSwitchId":"vsw-uf6a4tfeug6t05akf9w92","VpcId":"vpc-uf6eyafn4cmj5nol253d4"},"SpotPriceLimit":0.0,"StartTime":"2018-12-14T02:33Z","KeyPairName":"哇咔咔的sh密钥","InstanceName":"哇咔咔的上海ECS","Description":"","PublicIpAddress":{"IpAddress":["47.100.239.99"]},"InstanceType":"ecs.n4.small","Status":"Running","Recyclable":false,"ClusterId":"","GPUSpec":"","GPUAmount":0,"InstanceChargeType":"PrePaid","DedicatedHostAttribute":{"DedicatedHostId":"","DedicatedHostName":""},"DeploymentSetId":""}]}}
稍微排版一下是这样的
{ "PageNumber":1, "TotalCount":1, "PageSize":10, "RequestId":"04F89A1C-EC73-4F6C-84EE-F2703732DE09", "Instances": { "Instance": [ { "ImageId":"centos_7_03_64_20G_alibase_20170818.vhd", "VlanId":"", "EipAddress": { "IpAddress":"", "AllocationId":"", "InternetChargeType":"" }, "ZoneId":"cn-shanghai-b", "IoOptimized":true, "SerialNumber":"41b2b827-014b-4723-bcdf-a5764c9d1c2e", "Cpu":1, "Memory":2048, "DeviceAvailable":true, "SecurityGroupIds": { "SecurityGroupId":["sg-uf6fq26zc62t0u0t8ftr"] }, "SaleCycle":"", "AutoReleaseTime":"", "OSType":"linux", "ResourceGroupId":"", "OSName":"CentOS 7.3 64位", "InstanceNetworkType":"vpc", "HostName":"aliyun", "CreationTime":"2018-12-05T06:51Z", "RegionId":"cn-shanghai", "DeletionProtection":false, "OperationLocks":{"LockReason":[]}, "ExpiredTime":"2019-06-05T16:00Z", "InnerIpAddress":{"IpAddress":[]}, "InstanceTypeFamily":"ecs.n4", "InstanceId":"i-uf6gchn2j65r5scbn6rz", "NetworkInterfaces": { NetworkInterface": [ { "MacAddress":"00:16:3e:02:0e:a2", "PrimaryIpAddress":"172.19.214.188", "NetworkInterfaceId":"eni-uf68mu7aigxbcs3huv90" } ] }, "InternetMaxBandwidthIn":500, "CreditSpecification":"", "InternetChargeType":"PayByBandwidth", "SpotStrategy":"NoSpot", "StoppedMode":"Not-applicable", "InternetMaxBandwidthOut":1, "VpcAttributes": { "NatIpAddress":"", "PrivateIpAddress": { "IpAddress":["172.19.214.188"] }, "VSwitchId":"vsw-uf6a4tfeug6t05akf9w92", "VpcId":"vpc-uf6eyafn4cmj5nol253d4" }, "SpotPriceLimit":0.0, "StartTime":"2018-12-05T06:55Z", "KeyPairName":"哇咔咔的密钥", "InstanceName":"哇咔咔", "Description":"", "PublicIpAddress": { "IpAddress"["47.100.239.99"] }, "InstanceType":"ecs.n4.small", "Status":"Running", "Recyclable":false, "ClusterId":"", "GPUSpec":"", "GPUAmount":0, "InstanceChargeType":"PrePaid", "DedicatedHostAttribute": { "DedicatedHostId":"", "DedicatedHostName":"" }, "DeploymentSetId":"" } ] } }
接下来我们就要用python对这些数据进行处理,恕本人才疏学浅,用了最蠢的方法来处理,直接上代码:
首先用python中的json.loads方法将获取到的json数据转化为字典
dictA=json.loads(response)
之后用for循环将一层一层的字典,列表的嵌套提取出来,并且存储到一个新的字典里面去:
dictEnd={} dictB=dictA['Instances'] listA=dictB['Instance'] dictC=listA[0] for i in dictC: if(type(dictC[i])==dict): dictD=dictC[i] if(type(dictD)==dict): for d in dictD: dictE=dictD[d] if(type(dictE)==list): listB=dictE if listB: if(type(listB[0])==dict): dictF=listB[0] for f in dictF: dictEnd[f]=dictF[f] else: dictEnd[d] = dictD[d] elif(type(dictE)==dict): dictG=dictE else: dictEnd[d]=dictD[d] else: dictEnd[i]=dictC[i]
这样的话,我们就已经将这个ECS的信息存储到diceEnd这个字典里面了,由于本人决定只把数据的值的部分输出到表格中,所以使用以下代码把刚刚生成的dict转换为一个list
listC=list(dictEnd.values())
3.输出到表格
这里使用openpyxl这个模块将内容输出到表格
wb = Workbook() ws=wb.active ws.append(listC) wb.save('txt.xlsx')
4.完整代码
from aliyunsdkcore.client import AcsClient from aliyunsdkecs.request.v20140526 import DescribeInstancesRequest from openpyxl import Workbook import json #创建AcsClient实例 client = AcsClient( "你的AccessKey", "你的AccessKey secret", "地域" ); # 创建request,并设置参数 request = DescribeInstancesRequest.DescribeInstancesRequest() request.set_PageSize(10) # 发起API请求并显示返回值 response = client.do_action_with_exception(request) dictA=json.loads(response) dictEnd={} dictB=dictA['Instances'] listA=dictB['Instance'] dictC=listA[0] for i in dictC: if(type(dictC[i])==dict): dictD=dictC[i] if(type(dictD)==dict): for d in dictD: dictE=dictD[d] if(type(dictE)==list): listB=dictE if listB: if(type(listB[0])==dict): dictF=listB[0] for f in dictF: dictEnd[f]=dictF[f] else: dictEnd[d] = dictD[d] elif(type(dictE)==dict): dictG=dictE else: dictEnd[d]=dictD[d] else: dictEnd[i]=dictC[i] #转化为list listC=list(dictEnd.values()) for i in range(len(listC)): if (type(listC[i])==list): listC[i]="" for i in listC: print(i) #excel wb = Workbook() ws=wb.active ws.append(listC) wb.save('txt.xlsx')
以上纯属本人理解,有什么错误的地方还望各位大神指正

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
为什么Docker容器将占领世界
为什么Docker容器将占领世界 我加入了bieryun,主持了一个关于Docker的网络研讨会,以及您可以使用容器将传统Windows应用程序迁移到云端以及运行开源无服务器平台。 我分享了Docker容器启用的最常用的用例。这些是公司目前在生产中所做的事情。以下是前五个场景,以及我在现场网络研讨会上对问答的所有答案。 将应用迁移到云端 将现有工作负载迁移到云曾经是IaaS和PaaS之间的选择。PaaS选项意味着将您的应用程序的要求与您选择的云的产品目录相匹配,并采用包含所有托管服务的组件的新架构: 这有利于运营成本和效率,但需要一个项目才能实现 - 您需要更改代码并运行完整的回归测试套件。当你上线时,你只能在一个云上运行,所以如果你想要多云或混合云,它将需要另一个项目。 另一种选择是IaaS,这意味着在云中租用虚拟机。由于您只需要启动一组VM并使用现有的部署工件和工具来部署应用程序,因此初始工作量较少: 但是,将VM环境从数据中心复制到云只意味着要复制所有运营和基础架构的低效率。你仍然需要管理你的所有虚拟机,而且它们仍然大量未充分利用,但现在你有一个月度账单显示它的效率是多么低效...
- 下一篇
使用 Docker 和 Node 快速实现一个在线的 QRCode 解码服务
本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0) 本文作者: 苏洋 创建时间: 2018年12月09日统计字数: 5453字阅读时间: 11分钟阅读本文链接: https://soulteary.com/2018/12/09/use-docker-and-node-to-quickly-implement-an-online-qrcode-decoding-service.html 使用 Docker 和 Node 快速实现一个在线的 QRCode 解码服务 本文将会介绍如何使用 Docker、Node、JavaScript、Traefik完成一个简单的二维码解析服务,全部代码在 300 行以内。 最近折腾文章相关的东西比较多,其中有一个现代化要素其实挺麻烦的,就是二维码。 不论是“生成动态、静态的二维码”,还是“对已经生成的二维码进行解析”,其实都不难实现。只是在日常工作中如果只是基于命令行去操作,会很不方便。 所以花了点时间,实现了一个简单的 QRCode 在线解析工具,在完成这个...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Hadoop3单机部署,实现最简伪集群
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长