IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Grep -> en Python


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 25
    Points : 45
    Points
    45
    Par défaut Grep -> en Python
    Bonjour,

    Je cherche à faire mon script sans utiliser grep donc à créer une commande correspondante à celle ci :

    grep "Subject: " /tmp/mail.log | grep -v -e "truc" -e "machin" -e "chose" > /tmp/check_mail.log

    Voici mon "code", je n'ai aucune fonction ou classe pour l'instant tant que ça marche pas...

    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
    f = open("/tmp/mail.log",'r')
    fichier  = f.readlines()
    f.close()
    
    r1="Subject:"
    r2=["truc","machin","chose"]
    liste=[ ]
    
    for ligne in fichier:
    	if r1 in ligne: 
    	 for x in r2:
    	   if x not in ligne:
    		liste.append(ligne)
    
    print(liste)
    Le premier filtre fonctionne, il n'y a que les lignes comprenant "Subject" qui sont ajoutées.
    Quand j'affiche la liste les lignes comprenant les 3 mots clés "truc" "machin" "chose" apparaissent
    j'ai mis en gras ce qui ne marche pas : la liste des 3 mots clés...
    J'ai fais un essai avec un seul mot clé dans la liste r2 ça marche
    j'ai afficher les mots clé dans la boucle ça liste bien successivement les 3 mots clés.

    Merci d'avance si vous pouvez m'apporter votre aide, je bloque dessus.

    Version du Python utilisé sur les serveurs : 2.6.6

  2. #2
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Salut,

    Je trouve que ça manque un peu de clarté. Je résume mes interrogations: Dans le fichier "/tmp/mail.log", Veux-tu récupérer:

    1 - Toutes les lignes contenant "Subject" et au moins un des trois "truc","machin","chose"?

    2 - Toutes les lignes contenant "Subject" et tous les trois "truc","machin","chose"?

    3 - Toutes les lignes contenant "Subject" et aucun des trois "truc","machin","chose"?

    Voici un exemple pour le cas 1:

    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
    27
    28
    29
    30
    31
    import sys
    # test text...
    """
    Subject: tr uc ma chin ch ose
    Subject: truc machin chose
            truc machin chose
    Subject:      machin chose
    Subject:             chose
            truc             
            truc machin chose
    """
     
    fname = sys.argv[0]
    with open(sys.argv[0],'r') as fp:
        input_lines = fp.readlines()
     
    pattern1 = "Subject:"
    patterns2 = ["truc","machin","chose"]
    out_lines=[ ]
     
    for line_num, line in enumerate(input_lines):
        if pattern1 in line:
            found = False
            for pattern in patterns2:
                if pattern in line:
                    found = True
                    break
            if found:
                out_lines.append("%s#%u:%s"%(fname, line_num+1, line))
     
    sys.stdout.write("".join(out_lines))
    Et voici la sortie console, chaque ligne est préfixée avec le nom du fichier et le numéro de ligne

    Code Sortie console : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dummy.py#5:Subject: truc machin chose
    dummy.py#7:Subject:      machin chose
    dummy.py#8:Subject:             chose

  3. #3
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 25
    Points : 45
    Points
    45
    Par défaut
    Merci pour votre réponse et désolé si ce n'est pas très clair.

    Je cherche a réaliser le cas 3 : Toutes les lignes contenant "Subject" et aucun des trois "truc","machin","chose"?

  4. #4
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Franchement, il y a juste un mot de différence... Là, ce n'est plus du python, juste de l’algorithmie...

    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
    27
    28
    29
    30
    31
    import sys
    # test text...
    """
    Subject: tr uc ma chin ch ose
    Subject: truc machin chose
            truc machin chose
    Subject:      machin chose
    Subject:             chose
            truc             
            truc machin chose
    """
     
    fname = sys.argv[0]
    with open(sys.argv[0],'r') as fp:
        input_lines = fp.readlines()
     
    pattern1 = "Subject:"
    patterns2 = ["truc","machin","chose"]
    out_lines=[ ]
     
    for line_num, line in enumerate(input_lines):
        if pattern1 in line:
            found = False
            for pattern in patterns2:
                if pattern in line:
                    found = True
                    break
            if not found:
                out_lines.append("%s#%u:%s"%(fname, line_num+1, line))
     
    sys.stdout.write("".join(out_lines))
    Code Sortie console : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dummy.py#4:Subject: tr uc ma chin ch ose
    dummy.py#17:pattern1 = "Subject:"

  5. #5
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 25
    Points : 45
    Points
    45
    Par défaut
    Merci ça fonctionne.

    Je répondais juste à ta question concernant le cas, je n'ai rien dis contre la modification de ton script.

    Encore merci

    bonne journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [langage] traduction d'un fonction python en perl
    Par ay_pepito dans le forum Langage
    Réponses: 3
    Dernier message: 04/12/2007, 15h06
  2. CORBA & PYTHON
    Par stan91stan dans le forum CORBA
    Réponses: 5
    Dernier message: 10/06/2004, 12h32
  3. module .so pour python... ?!
    Par totoetlititi dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 09/03/2004, 14h51
  4. [Lien]erreur dans mon programme python
    Par durnambule dans le forum Général Python
    Réponses: 11
    Dernier message: 29/01/2004, 14h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo