我想从一个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