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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.