gpt4 book ai didi

python - 如何使用 API 和 Python 提取数据?

转载 作者:太空宇宙 更新时间:2023-11-04 11:09:41 25 4
gpt4 key购买 nike

我有一堆服务器,我使用 API 来提取有关存储的数据。要获取有关 storage uuid(json 中的命名存储)的详细信息,我使用如下代码:

srvdet = requests.get('https://hhh.com/1.2/server/76856585', auth=HTTPBasicAuth('login', 'pass'))
srvdet_json = srvdet.json()
datas = srvdet.json()
print(datas)

并生成 json:

{
"server": {
"boot_order": "",
"core_number": "2",
"created": ,
"firewall": "off",
"host": ,
"hostname": "hello",
"ip_addresses": {
"ip_address": [
{
"access": "private",
"address": "",
"family": ""
},
{
"access": "",
"address": "",
"family": "",
"part_of_plan": ""
}
]
},
"license": 0,
"memory_amount": "",
"nic_model": "",
"plan": "",
"plan_ipv4_bytes": "",
"plan_ipv6_bytes": "0",
"state": "started",
"storage_devices": {
"storage_device": [
{
"address": "",
"boot_disk": "0",
"part_of_plan": "",
"storage": "09845",
"storage_size": ,
"storage_title": "",
"type": ""

}

目前它工作得很好。问题是当我需要获取"09845" 时,它是存储 的值。当我尝试使用此代码时:

for storage in datas['server']['storage_devices']['storage_device']:
srvstorage = storage
print(srvstorage)

结果是:

{'storage': '09845', 'storage_size':, 'address': '', 'boot_disk': '0', 'type': '', 'part_of_plan': 'yes', 'storage_title': ''}

我做错了什么?如何将“09845”保存到变量中?

编辑:

现在我在尝试访问有关存储的详细信息时遇到错误。我想提取 json 中的 state 备份状态:

{
"storage": {
"access": "private",
"backup_rule": {},
"backups": {
"backup": []
},
"license": 0,
"part_of_plan": "",
"servers": {
"server": [
""
]
},
"size": ,
"state": "online",
"tier": "",
"title": "",
"type": "",
"uuid": "",
"zone": ""
}
}

当我执行这段代码时:

bkpdet = requests.get('https://fffff.com/1.2/storage/08475', auth=HTTPBasicAuth('login', 'pass'))
bkpdet_json = bkpdet.json()
datastg = bkpdet.json()
print(datastg)
for sts in datastg['storage']:
bkpsts = sts['state']
print(bkpsts)

我收到这个错误:

Traceback (most recent call last):
File "<stdin>", line 2, in <module>
TypeError: string indices must be integers

整个想法是最后使用此代码获取有关状态的信息:

if bkpsts == "online":
print('Backup has been created.')
else bkpsts == "backuping":
print('Backup creation is in progress.')
else:
print(bkpdet.status_code)

我正在搜索,但仍然找不到这里有什么问题。

最佳答案

当你想访问存储时你错过了一个 key ,你循环它就可以了。但是在每次迭代中你都会得到一个字典,你需要从中调用正确的键,在你的例子中是 storage

for storage in datas['server']['storage_devices']['storage_device']: 
srvstorage = storage.get("storage", None)
print(srvstorage)

注意事项

get 方法最好使用,因为您可能会遇到内部没有存储信息的设备,通过使用 get 可以避免 KeyError

关于python - 如何使用 API 和 Python 提取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58607195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com