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 :

[Débutant] Recherche dans un fichier


Sujet :

Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 22
    Par défaut [Débutant] Recherche dans un fichier
    Bonjour à tous et à toutes,

    J'ai un souci de lecture en fichier. En fait j'ai un fichier de log de serveur apache contenant un peu ce que l'on veux. je souhaite faire une recherche d'adresse ip parmi ces logs.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/usr/bin/python
    # -*- coding: iso-8859-1 -*-
     
    chaine = "pouet"
     
     
    fichier = open("C:\Log Apache\test.txt","r")
    for ligne in fichier:
        if chaine in ligne:
            print ligne
     
    fichier.close()
    L'erreur retournée est la suivante :

    Traceback (most recent call last):
    File "C:\Log Apache\scriptrecherche", line 17, in <module>
    fichier = open("C:\Log Apache\test.txt","r+")
    IOError: [Errno 22] invalid mode ('r+') or filename: 'C:\\Log Apache\test.txt'
    Je ne comprend pas le souci, auriez vous de quoi éclairer ma lanterne de grand débutant dans ce langage ?

    Merci par avance

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 695
    Par défaut
    L'interpréteur dit que vous avez une erreur à la ligne 17 et montre un autre open que celui qui est à la ligne 7 du script que vous fournissez...
    Est ce le "bon" source?
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre chevronné
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Par défaut
    Bonjour,

    Essaye de mettre un r

    fichier = open( r"C:\Log Apache\test.txt","r")
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

  4. #4
    Membre éclairé Avatar de Snooky68
    Homme Profil pro
    Développeur Web/Python/PHP
    Inscrit en
    Mai 2006
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web/Python/PHP
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 273
    Par défaut
    Se sont des anti-slash non?

    Il faut doubler les anti-slash dans l'adresse de ton fichier je pense.
    fichier = open( "C:\\Log Apache\\test.txt","r")

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 695
    Par défaut
    Citation Envoyé par Snooky68 Voir le message
    Se sont des anti-slash non?

    Il faut doubler les anti-slash dans l'adresse de ton fichier je pense.
    fichier = open( "C:\\Log Apache\\test.txt","r")
    S'il faut faire quelque chose dans ce cas c'est probablement parce que "\t" dans "\test" est interprêté comme <TAB>.

    Le r"C:\Log Apache\test.txt" proposé par vincent.mbg dit "ne pas interprêter \ comme caractère d'échapemment".
    \\ dit 'je t'envoie un anti-slash'.

    Personnellement, je préfère utiliser "C:/Log Apache/test.txt".
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 22
    Par défaut
    Merci pour vos retours !

    J'essaye ce que vous me recommandez et je reviens vers vous (après mon week end )

    Bien Cordialement

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 22
    Par défaut
    Bonjour,

    Merci pour aide cela fonctionne avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #!/usr/bin/python
    # -*- coding: iso-8859-1 -*-
    chaine = "192.168.0.1"
    print "ping" 
    fichier = open(r"C:\\Log Apache\\test.txt","r")
    for ligne in fichier:
        #print "ping"
        if chaine in ligne: 
            print ligne    
    fichier.close()
    print "SUCCESS"
    Toutefois j'aimerais chercher chaque élément d'une liste (on me le demande pas mais c'est pour ma culture). Typiquement en exécutant ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #!/usr/bin/python
    # -*- coding: iso-8859-1 -*-
     
    chaine = ["192.168.0.1","172.45.23.1"]
     
    print "ping" 
    fichier = open(r"C:\\Log Apache\\test.txt","r")
    for ligne in fichier:
        print "ping"
        if chaine in ligne: 
            print ligne
     
    fichier.close()
    J'ai donc ce code d'erreur
    >>> ================================ RESTART ================================
    >>>
    ping
    ping

    Traceback (most recent call last):
    File "C:\USER\TOTO\Python\Log Apache\scriptrecherche2", line 10, in <module>
    if chaine in ligne:
    TypeError: 'in <string>' requires string as left operand, not list
    >>>
    Visiblement il s'agit d'une erreur de typage de mon champ "chaine"

    Que dois je faire afin de rechercher une liste de chaine de caractères dans un fichier texte, et surtout qu'il me signale si il voit un morceau de ma chaine dans un fichier ?

    Exemple:
    Chaine = ["A","B"]
    je compile

    et hop il m'imprime la ligne X du fichier qui contient A mais pas de ligne qui contient B car B n'est pas dans le fichier.

    Je sais pas si je suis bien clair

    Merci pour votre aide !

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 695
    Par défaut
    Salut
    Pas très performant mais çà colle pas mal à la description de ce que vous voulez.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for ligne in fichier:
        print "ping"
        if any( ip in ligne for ip in chaine): 
            print ligne
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 22
    Par défaut
    merci ca fonctionne nickel.

    Sujet résolu !

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

Discussions similaires

  1. [Débutant] Recherche dans des fichiers
    Par drcd dans le forum Oracle
    Réponses: 0
    Dernier message: 18/10/2007, 11h38
  2. recherche dans un fichier texte en perl(débutant)
    Par Shyboy dans le forum Langage
    Réponses: 3
    Dernier message: 04/07/2006, 23h53
  3. Rechercher dans un fichier avec emacs
    Par ggnore dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 24/11/2004, 10h28
  4. recherche dans un fichier xml (castor)
    Par pingoui dans le forum Format d'échange (XML, JSON...)
    Réponses: 8
    Dernier message: 06/09/2004, 14h28
  5. [LG]rechercher dans un fichier texte
    Par BadFox dans le forum Langage
    Réponses: 11
    Dernier message: 01/12/2003, 15h57

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