Reformulation complète de l'article original. Ce que j'essaie de faire est d'analyser certaines données ligne par ligne et de créer un dictionnaire. Je pense qu'il y a une meilleure façon d'organiser ces données. La manière originale que j'essayais de faire à ce sujet ne tenait pas compte de plusieurs choses, donc je suis arrivé avec ça. Je parcours en boucle la sortie de la politique de service ligne par ligne pour assembler les données par Interface, nom de la politique, puis en tirant la file d'attente, les gouttes et les gouttes sans tampon. Le problème que je rencontre est que ce n'est pas la prise en compte de la politique supplémentaire, donc le passage initial des données est écrasé.Création d'un dictionnaire imbriqué en python à partir de plusieurs sources de données
sortie Politique de service:
GigabitEthernet11/1
Service-policy output: Gi11_1
Counters last updated 7191104 seconds ago
Class-map: class-default (match-any)
0 packets, 0 bytes
30 second offered rate 0000 bps, drop rate 0000 bps
Match: any
Queueing
queue limit 33025 packets
(queue depth/total drops/no-buffer drops) 0/0/0
(pkts output/bytes output) 0/0
shape (average) cir 500000000, bc 2000000, be 2000000
target shape rate 500000000
Service-policy : child
Counters last updated 7191104 seconds ago
Class-map: class-default (match-any)
0 packets, 0 bytes
30 second offered rate 0000 bps, drop rate 0000 bps
Match: any
Queueing
queue limit 33025 packets
(queue depth/total drops/no-buffer drops) 0/0/0
(pkts output/bytes output) 0/0
bandwidth remaining ratio 100
for ints, int_strings in zip(int_names, int_output):
counts.setdefault(ints, {})
for line in int_strings.splitlines():
matchpolicy = re.search(r'(Service-policy.*)', line)
matchdrops = re.findall(r'total drops.*', line)
if matchpolicy:
spolicies = matchpolicy.group(0)
counts[ints]['Policy'] = spolicies
if matchdrops:
regx = re.search(r'\s(\d+)\/(\d+)\/(\d+)', line)
counts[ints]['queue'] = int(regx.group(1))
counts[ints]['drops'] = int(regx.group(2))
counts[ints]['no-buffer'] = int(regx.group(3))
return counts
J'ai essayé de créer un dictionnaire avec un niveau de profondeur supplémentaire, mais j'obtenir une erreur de clé sur les comptes en ligne [INTS] [spolicies]. D'après ce que j'ai lu, j'ai pensé que c'était ainsi que fonctionnaient les dictionnaires imbriqués, mais je pense avoir mal compris.
for ints, int_strings in zip(int_names, int_output):
counts.setdefault(ints, {})
for line in int_strings.splitlines():
matchpolicy = re.search(r'(Service-policy.*)', line)
matchdrops = re.findall(r'total drops.*', line)
if matchpolicy:
spolicies = matchpolicy.group(0)
counts[ints][spolicies]
if matchdrops:
regx = re.search(r'\s(\d+)\/(\d+)\/(\d+)', line)
counts[ints][spolicies]['queue'] = int(regx.group(1))
counts[ints][spolicies]['drops'] = int(regx.group(2))
counts[ints][spolicies]['no-buffer'] = int(regx.group(3))
return counts
Quoi qu'il en soit, je suppose qu'il peut y avoir une meilleure façon d'organiser ces données afin que je puisse passer par plus facilement plus tard. Des idées?
[ « Quelqu'un peut-il me aider? » n'est pas une question SO valide] (https://meta.stackoverflow.com/questions/284236/why-is-can-someone-help-me-not-an-actual-question). Cela suggère généralement que ce dont vous avez besoin est d'une demi-heure avec un tuteur local ou de suivre un tutoriel, plutôt que Stack Overflow. – Prune