2016-08-23 4 views
1

Ich habe ein Skript, das eine CSV liest Datei csv fileanhängt Werte Python Wörterbuch

Asset IP Address,Vulnerability Title 
50.103.128.11,Partition Mounting Weakness 
10.103.128.11,UDP IP ID Zero 
10.103.128.11,Root's umask value is unsafe 
0.103.128.11,Root's umask value is unsafe 
20.103.128.11,Root's umask value is unsafe 
10.103.128.11,ICMP timestamp response 
22.103.128.11,ICMP timestamp response 
10.103.128.11,UDP IP ID Zero 
10.103.129.11,Partition Mounting Weakness 

und nach meinem Skript ausgeführt

import csv 
from pprint import pprint 
#with open('test.csv', 'rb') as f: 
# reader = csv.DictReader(f, delimiter=',') 
# for row in reader: 
#  print row 
#dict = {a:[], b:[]} 
dict = {} 
with open('test.csv', 'rb') as f: 
    reader = csv.DictReader(f, delimiter=',') 
    for row in reader: 
     a = row["Vulnerability Title"] 
     b = [row["Asset IP Address"]]  
     #b = row(["Asset IP Address"]) 
     #dict = {a:[], b:[]}   
     if a in dict: 
     #print row["Vulnerability Title"] 
     #if row["Vulnerability Title"] in dict: 
      dict[a].append(b) 
     else: 
      dict[a] = b 
pprint(dict) 

liest die Verwundbarkeit Listen und ein Wörterbuch mit ips erstellen, haben Diese Schwachstelle. Wie auch immer, meine Ergebnisse sind eine Liste mit einer zusätzlichen Klammer. wollte erreichen, dass jemand bessere Ideen hat oder mir helfen kann. results

{'ICMP timestamp response': ['10.103.128.11', ['22.103.128.11']], 
'Partition Mounting Weakness': ['50.103.128.11', ['10.103.129.11']], 
"Root's umask value is unsafe": ['10.103.128.11', 
            ['0.103.128.11'], 
            ['20.103.128.11']], 
'UDP IP ID Zero': ['10.103.128.11', ['10.103.128.11']]} 
+0

Sie brauchen nicht die outter '[]' in 'b = [row [“ Asset IP Address "]]' – innoSPG

Antwort

2

Verwenden setdefault(), machen Sie nicht b eine Liste, und verwenden Sie keine builtins als Variablennamen:

d = {} 
with open('test.csv', 'rb') as f: 
     reader = csv.DictReader(f, delimiter=',') 
for row in reader: 
    a = row["Vulnerability Title"] 
    b = row["Asset IP Address"] 
    d.setdefault(a, []).append(b) 
+0

Sie sollten auch beachten, dass Sie die 'b' Zuweisung korrigiert haben. Und es gibt einen Einrückungsfehler (wahrscheinlich nur ein Buchungsfehler, aber Sie haben es kopiert). – alecxe

+0

Ja, ich kopiere und klebte einfach, danke fürs Hinzeigen. Ich sehe, du warst ein bisschen schneller als ich. – Anthon

2

Sie versuchen die defaultdict neu zu erfinden:

from collections import defaultdict 

d = defaultdict(list) 
with open('test.csv', 'rb') as f: 
    reader = csv.DictReader(f, delimiter=',') 
    for row in reader: 
     d[row["Vulnerability Title"]].append(row["Asset IP Address"]) 

pprint(d) 

Als Randbemerkung, dict ist nicht die beste Wahl für einen Variablennamen - Sie sind die built-in dict() Shadowing, wählen Sie eine anderer Variablenname