我想從一個CSV文件構建一個數據結構。 CSV文件的內容如下。如何在python循環中初始化數據結構一次
‘Windows 8’,10.1.1.1,’Windows 8 Server’,’SiteA’
‘Windows 8’,10.2.2.2,’Windows 8 Server’,’SiteB’
‘Cisco Router,’172.16.1.1’,’Cisco Router 881’,’SiteA’
‘Cisco Router,’172.16.1.3’,’Cisco Router 881’,’SiteC’
‘Cisco Router,’172.16.1.4’,’Cisco Router 881’,’SiteB’
我想按設備類型,然後網站分組數據,並有一個普通的IP地址列表與描述。
我遇到的問題是我不能確保我只初始化數據結構的各個部分只有一個。
以下是我的代碼。
import csv
import pprint
data = {}
pp = pprint.PrettyPrinter(indent=4)
f = open('/Users/marcos/Desktop/vulns/data.csv', 'rt')
try:
reader = csv.reader(f)
for row in reader:
product = row[0]
ip = row[1]
description = row[2]
site = row[3]
try:
data[product][site]['ipaddresses'].append(ip)
data[product][site]['description'] = description
except:
data[product] = {}
data[product][site] = {}
data[product][site]['ipaddresses'] = []
data[product][site]['ipaddresses'].append(ip)
data[product][site]['description'] = description
finally:
f.close()
pp.pprint(data)
什麼我目前得到以下,這是因爲我除了總是觸發是我相信
{ '‘Cisco Router': { '’SiteB’': { 'description': '’Cisco Router 881’',
'ipaddresses': ['’172.16.1.4’']}},
'‘Windows 8’': { '’SiteB’': { 'description': '’Windows 8 Server’',
'ipaddresses': ['10.2.2.2']}}}
通常的方式來處理,這是使用'defaultdict(字典)'(從'collections')自動initiallze丟失的鑰匙,或手動檢查'如果my_item不my_dict:my_dict [my_item] = {}'在添加到字典(或列表或...)之前 – Julien