Récemment j’ai effectué une migration chez un client dans le Béarn.
Le but de cette migration était de changer leur cœur de réseau.
Jusqu’ici, rien de bien problématique pour un ingénieur réseau confirmé.
Suite à cette migration, le lendemain, le client me demande de reconfigurer un port-mirroring qui ne fonctionnait plus.
Aucun problème !
Sauf que son port-mirroring était constitué de plus de 800 interfaces vlans.
Ah !
Je me dis que je vais faire un copier-coller d’un show vlan et je vais pouvoir traiter les données avec notepad++.
Que nenni !
Les données sorties du show vlan étaient mal indenter, avec des espaces dans tous les sens.
C’est là que je me suis dit… Tiens, et si j’utilisais du Python.
Voila comment j’ai procédé

Dans un premier temps j’ai récupérer la liste des vlans pour effectuer mon template de configuration.
vlan 10
vlan 20
vlan 30
vlan 45
vlan 50
vlan 60
vlan 700
vlan 800
PS : J’ai raccourci pour que ce soit lisible.
Le but étant d’avoir cette configuration à la fin
source vlan 10 both source vlan 20 both source vlan 30 both source vlan 45 both source vlan 50 both source vlan 60 both source vlan 700 both source vlan 800 both
Pour obtenir ce résultat, je vais effectuer 3 actions :
- Nettoyer les espaces
- Ajouter le texte au début & à la fin de chaque ligne
- Sauvegarder le tout dans un fichier
Nettoyage des espaces
Un fois récupéré en CLI, je copie/colle mes données dans mon IDE (integrated development environment), Visual Studio Code.

Je créé ensuite un fichier, que j’appelle cleaner.py.
Il servira de script python pour nettoyer mes données.
Dans un premier temps je vais importer mes données dans cleaner.py
data = "SiteWeb/data.txt"
with open(data, "r") as f:
for i in f:
a = i.strip()
print(a)
Dans les deux premières lignes, je fais définir le chemin des données, puis importer ces données dans mon fichier python.
- Définir le chemin de mes données (data = « Chemin Relatif »)
- With open(data, « r ») as f:
- Ouvrir le fichier définit dans le chemin data
- L’ouvrir en tant que r, Read-only
- Stocker le contenu de ce fichier dans la variable f
Dans les 3 dernières lignes, je vais effectuer une action pour chaque ligne dans le fichier.
On pourrait le lire ainsi. Pour chaque ligne (i) dans le fichier (f), je nettoie (strip) la ligne des caractères (strip(), soit les espaces), et je stocke cela dans a. Ensuite j’affiche a.
Une fois fini, je passe à la ligne suivante.
Quand toutes les lignes sont passé dans la moulinette, j’arrête le script.
- For i in f: Pour chaque ligne dans f
- a = i.strip() : Je supprime les espaces
- print(a) : j’affiche
Le résultat :
vlan 10 vlan 20 vlan 30 vlan 45 vlan 50 vlan 60 vlan 700 vlan 800
Youpi ! Mon texte est nettoyé. Il faut maintenant que j’ajoute un morceau au début et à la fin de chaque ligne.
Ajout de texte
Pour rappel on doit avoir cette finalité à chaque ligne.
source vlan 10 both
On note 3 parties :
- Avant : source
- Milieu : la valeur de la variable a (ce qui fait le print dans la partie précédente)
- Après : both
On va faire simple !
Vu que j’ai déjà réussi à faire un print des vlans, il ne me suffit qu’à faire un print avant et un print après.
En gros, afficher « source »; afficher la valeur de « a », afficher « both »
Rien de plus simple
data = "SiteWeb/data.txt"
with open(data, "r") as f:
for i in f:
a = i.strip()
print(f"source {a} both")
J’ai modifié mon code précédent. Je ne souhaite plus afficher que la valeur de « a », je veux afficher d’autre choses.
print(f"source {a} both")
affiche source, puis la variable a, puis both.
C’est quoi le f ?
En faite, dans mon print je mixe des données sous forme de texte (string, str) et des données sous forme de variable (a).
Si je veux faire ça, je dois utiliser des f-string (Qu’à partir de python 3.6)
C’est pour cela que je met le f, puis mon expression avec ma variable entre {}.
Le résultat
source vlan 10 both source vlan 20 both source vlan 30 both source vlan 45 both source vlan 50 both source vlan 60 both source vlan 700 both source vlan 800 both
Yes !
En soi, je pourrais faire un copier/coller sans nécessairement faire un export dans un fichier. Dans le cas présenter c’est faisable, mais avec 800 lignes c’est moins pratique !
En plus, on touche le but !
Export dans un fichier
Nous y sommes. Comment copier chaque ligne dans un fichier texte ?
On va simplement ouvrir un fichier non créé et dire que pour chaque itération on écrit dans ce fichier.
data = "SiteWeb/data.txt"
destination = "SiteWeb/destination.txt"
with open(data, "r") as f:
with open(destination, "w") as g:
for i in f:
a = i.strip()
result = f"source {a} both\n"
g.write(result)
ligne 2 : Je définit un nouveau fichier destination, avec son chemin relatif.
ligne 4 : J’ouvre mon fichier destination, en tant que write (« w »), et j’utilise comme variable g.
La suite peut se lire ainsi :
- Pour chaque ligne dans le fichier source (ligne 5)
- Je nettoie les espaces (ligne 6)
- J’écris « source valeurdea both » et je fais un saut à la ligne (\n) (ligne7)
- J’écris dans le fichier destination le résultat de mon itération.
Voici mon IDE avant d’avoir lancer le code

Voici mon IDE après d’avoir lancer le code

La différence ?
J’ai un fichier destination.txt qui est apparu !

Voici mon code final :
data = "SiteWeb/data.txt"
destination = "SiteWeb/destination.txt"
with open(data, "r") as f:
with open(destination, "w") as g:
for i in f:
a = i.strip()
result = f"source {a} both\n"
g.write(result)
Conclusion
Grâce à un petit morceau de python, 8 lignes seulement, on peut s’affranchir de tâche répétitives.
Dans le cas présenter, nous nous attardons sur la nécessité de reconfigurer un équipement réseau. Mais la logique s’applique dans d’autres domaines comme pour le nettoyage de document Excel, le inventaire des commerçants…
NB :
- Les informations ont volontairement été modifié pour garantir la sécurité de données du client. L’idée de base étant la même, à savoir récupérer des données, les nettoyer pour les réutiliser.

