我有一個包含主機名串列的文本檔案:
router-1
firewall-1
firewall-2
distro-1
我想做的是從該檔案創建一個串列,然后從該串列中網頁抓取某些特定文本字串以確定設備的device_platform. 然后創建一個看起來像這樣的字典:
[
{'hostname': 'router-1', 'device_platform': 'cisco_ios'},
{'hostname': 'firewall-1', 'device_platform': 'juniper'},
{'hostname': 'firewall-2', 'device_platform': 'cisco_asa'},
{'hostname': 'distro-1', 'device_platform': 'broadcom_icos'}
]
到目前為止,這就是我所擁有的,網路抓取部分有效。我只需要知道如何添加一個部分來創建串列,然后從該串列中抓取資訊并將其回傳以創建像上面那樣的字典。
import requests
import urllib3
with open('devices.txt', 'r') as f:
host = f.read().splitlines()
print(host)
for device in host:
url = f'http://nunya.com/device/{device}.nunya.com/config'
urllib3.disable_warnings()
request = requests.get(url).text
if 'event manager applet' in request and 'pager' not in request:
device_platform = 'cisco_ios'
elif 'junos' in request:
device_platform = 'juniper'
elif 'pager' in request:
device_platform = 'cisco_asa'
else:
device_platform = 'broadcom_icos'
print(f'hostname: {device}, device_platform: {device_platform}')
uj5u.com熱心網友回復:
我看你最后想要的是這種格式,
[
{'hostname': 'router-1', 'device_platform': 'cisco_ios'},
{'hostname': 'firewall-1', 'device_platform': 'juniper'},
{'hostname': 'firewall-2', 'device_platform': 'cisco_asa'},
{'hostname': 'distro-1', 'device_platform': 'broadcom_icos'}
]
這是一個list,dictionaries不需要對您的代碼進行太多更改即可獲得此功能。
list只需在回圈開始之前啟動一個空,for并隨著回圈的進行繼續向其附加所需dictionaries的內容。這是代碼:
import requests
import urllib3
with open('devices.txt', 'r') as f:
host = f.read().splitlines()
print(host)
data = []
for device in host:
url = f'http://nunya.com/device/{device}.nunya.com/config'
urllib3.disable_warnings()
request = requests.get(url).text
if 'event manager applet' in request and 'pager' not in request:
device_platform = 'cisco_ios'
elif 'junos' in request:
device_platform = 'juniper'
elif 'pager' in request:
device_platform = 'cisco_asa'
else:
device_platform = 'broadcom_icos'
data.append({'hostname': device, 'device_platform': device_platform})
print(f'hostname: {device}, device_platform: {device_platform}')
print(data)
如您所見,我list通過說data=[]在回圈中啟動了一個空,您可以看到我將dictionaries所需的資料附加到行中的串列中data.append({'hostname': device, 'device_platform': device_platform})。
希望這對你有用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/456011.html
上一篇:如何將相同的字典鍵合并為一個?
