2017-05-07 6 views
1

Ich schreibe gerade ein Programm, das eine Verbindung zu einem Cisco-Switch oder -Router herstellt und dann die Ausgabe eines 'show int' überprüft. Ich verarbeite/parse dann die Daten bis zu dem Punkt, an dem ich ein Wörterbuch von einundzwanzig Schlüssel/Wert-Paaren von einundzwanzig habe. Alle Werte sind ganze Zahlen. Es funktioniert genau so wie ich es möchte bis zu diesem Punkt.Überprüfung auf Werte ungleich Null in einem Wörterbuch

Ich habe einige Probleme visualisieren, was ich als nächstes tun möchte und ich hatte gehofft, ich könnte einige Ideen und/oder Anleitung bekommen.

Was ich tun möchte, ist dies:

prüfen jeden Wert. Wenn ALLE Werte Null sind, dann überspringe dieses Wörterbuch. Wenn ANY Einzelwert ungleich Null ist (es wird eine positive ganze Zahl sein, wenn es nicht Null ist), dann möchte ich das gesamte Wörterbuch in einer Datei speichern.

Jede Iteration meines Programms erstellt ein Wörterbuch, das Daten von einem Switch- oder Router-Port darstellt.

Da ich das gesamte Wörterbuch (alle einundzwanzig Schlüssel/Wert-Paare) wollen, wenn sogar ein einzelner Wert nicht Null ist, war ich nicht sicher, ob alle Werte addiert und dann überprüft, ob die Summe> ist 0 war die beste Option.

Ich könnte möglicherweise Tausende von Switch-Ports überprüfen.

Es scheint mir, dass "am besten" wäre, Werte zu überprüfen und sobald ich einen Wert ungleich null trage, möchte ich das gesamte Wörterbuch speichern und mit dem nächsten fortfahren (durch die Ports auf einem wechseln, zum Beispiel), aber ich bin mir nicht sicher, wie ich das erreichen soll.

Ich würde einige Ideen oder Beispiele schätzen, wie man diese Aufgabe am besten erfüllt.

Oh, und ich zögere, das Wort "beste" zu verwenden. Da ich Tausende von Ports verarbeiten werde, was ich nicht will, ist ein ineffizienter Ansatz, weshalb ich zögere, einfach alle Werte zu addieren.

Ich bin nur nicht sicher, wie man in Code einfügt: "Sobald ich einen einzelnen Wert ungleich sehe, speichere das gesamte Wörterbuch ab und gehe zum nächsten".

Antwort

2

Hier ist eine direkte Übersetzung der Anfrage, die von den bereits ausgeführten Teilen ausgeht und die any() Funktion enthält, die auf die values des Wörterbuchs angewendet wurde.

# I am in the process of writing a program that connects to a Cisco switch or 
# router and then examines the output of a 'show int '. I then process\parse the 
# data to the point where I have a dictionary of twenty-one key\value pairs. 
# All values are integers. 
for device in devices: 
    s = run_show_interfaces(device) 
    d = preprocess_parse(s) 

    # Check each value. If ALL values are zero, then skip that dictionary. If ANY 
    # single value is non-zero (it will be a positive integer if it is not zero), 
    # then I want to save to a file the entire dictionary. 
    if any(d.values()): 
     filename = os.path.join(device, '.txt') 
     with open(filename, 'w') as f: 
      json.dump(d, f) 

FYI, die any() Funktion hat einen frühen-out und wird aufhören, sobald es einen Nicht-Null-Wert findet. In Python 3 gibt values ​​() eine Ansicht der Daten zurück, sodass nicht alle Informationen kopiert werden. Verwenden Sie in Python 2 viewvalues(), um denselben Effekt zu erzielen. Zusammengenommen wird Ihnen das eine großartige Leistung bringen.

+0

Vielen Dank !! – MarkS

-1

Wenn alle Schlüssel ungleich null den gleichen Wert haben, können Sie einfach dict.get (x) ausführen, wenn x nicht im Wörterbuch ist, wird none zurückgegeben.

sonst:

for value in dict.values(): 
     if value != 0: 
     return true 
    return false 

Sie können auch eine dict.get (0) zuerst in dem Fall tun alle Werte ungleich Null.

Verwandte Themen