Utilisation du module RE et mise en page d'un extract
Bonjour,
Je viens chercher un peu d'aide car je souhaite mieux maitriser le module RE si possible de python (étant débutant) et mettre en forme un fichier selon le résultat
Premièrement j'ai un fichier contenant des lignes types:
Code:
1 2 3
| mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin |
Je souhaite en extraire le "login", qui ici sera définit comme étant entre le début de ligne et le premier séparateur ":" .
Ensuite le HOME "/var/spool/login" comprent entre les ":/" et ce, sur les entrées ne contenant que "nologin" en fin de lignes. Pour pimentés le tout je dois formater mon fichier sous forme de colonne bien alignés, les logins ne sont jamais de la même taille idem pour le path du home.
Le fichier de sortie se présente sous formatage de colonne tel que:
Code:
1 2
| login1 /home/toto/login1
login111111 /home/toto/login111111 |
C'est la mon point le plus difficile.
Pour le module RE j'en suis à ciblé entre 2 types de balises faisant office de delimiteur, sur mon exemple, il me sortira le premier login de la premiere ligne "mail" sans tenir compte des lignes finissant par "nologin" ou non.
Mes codes actuel, après il me faudra l'ajouter dans une boucle AND pour ressortir le path:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #!/usr/bin/python2.6
#-*- coding: utf-8 -*-
import re
begin_balise = ''
end_balise = ':x'
motif = begin_balise + '.*' + end_balise #construction de la recherche
obj_fichier = open("/home/blanci/Desktop/passwd","r") #fichier a lire
texte = obj_fichier.read() #lecture fichier
obj_fichier.close()
obj_regex = re.search(motif, texte) #recherche avec la construction dans le contenu du fichier
if obj_regex is None: # si aucun retour
print "Pas de resultat reconnaissable dans le fichier."
else: # sinon j'ecris le login dans le fichier
texte = obj_regex.group()
texte = texte.replace(begin_balise, '')
texte = texte.replace(end_balise, '')
texte = texte.strip()
print "Voici le resultat :",texte
passwd_extract = open('/home/Bureau/passwd_extract.txt', "w")
passwd_extract.write(texte)
passwd_extract.close() |
Et pour le moment ma boucle for qui va chercher les lignes en nologin:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| #!/usr/bin/python2.6
#-*- coding: utf-8 -*
chaine = "nologin" # Texte à rechercher
print "\n ======== les lignes recherches contiennent: ", chaine, "========\n"
fichier = open("/home/blanci/Desktop/passwd","r") # fichier a lire
for line in fichier:
if chaine in line:
print line.split(" ") #affichage des lignes nologin
fichier.close() |
Comme préciser au début je débute en python c'est pour ca que pour le moment j'ai 2 codes séparés, pour bien comprendre le fonctionnement de chaque étapes du module et de mes boucles pour les faire fonctionner ensembles par la suite.