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 :

Python 2.7 - Chercher caractère dans un fichier


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 129
    Par défaut Python 2.7 - Chercher caractère dans un fichier
    Bonjour,

    En Python 2.7, je dois chercher le caractère '}' et juste avant insérer un string.

    Actuellement, je parcours le fichier ligne par ligne et en suite caractère par caractère... Mais je trouve ça un peu trop bourrin. Quelle est la meilleure des solutions ?
    Je reste bloqué car il ne voit pas forcément le caractère '}' à cause des caractères de retour à ligne, des tabulations, etc...

    D'avance merci,

  2. #2
    Expert confirmé

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Par défaut
    Bonjour, la meilleur solution est d'utiliser le module re, avec une REGEX.

    Que dois tu faire une fois le caractère trouvé? Il y a peut etre une methode pour string ou un autre module encore mieux adapté fonction de tes besoins précis. Détaille nous un peu plus ce que tu désire faire.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 129
    Par défaut
    Tout d'abord merci pour ta réponse.

    En gros, nous avons des fichiers de configuration (qui sont tout pourris ) )
    Le fichier commence par un { et termine par un }. Bon ça c'est en théorie car vu que tout le monde modifie les fichiers il y a parfois des sauts de ligne en plus à la fin.

    Le but est d'insérer du texte juste avant le '}' et de sauter une ligne. Exemple :
    // Avant la modification :
    //MonExempleDeFichier
    {
    maconf = coucou
    }

    -------
    // Après la modification :
    //MonExempleDeFichier
    {
    maconf = coucou
    serveur = MonAdresse
    }

  4. #4
    Expert confirmé

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Par défaut
    D'accord, je comprend mieux.

    Si tu regarde ici: http://docs.python.org/2/library/std...string-methods, la méthode find devrait te plaire.

    Tu lui passes trois paramètres: le premier est la chaine que tu cherches (dans ton cas "}" si j'ai bien compris), le second est l'index du caractère de départ, le troisième l'index de fin de recherche. la méthode find va alors te renvoyer l'index le plus faible s'il trouve quelque chose, sinon il renverra -1.

    Utilise du coup la méthode readline:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    f = open('file','r')
    f_tmp = open('file_tmp', 'w')
    f_line = f.readline()
    while f_line <> "":
        rtr = f_line.find("}\n") #je cherche, sous linux, le caractère }, sur la ligne entière
        if rtr <> -1:
            f_tmp.write("texte en sus")
        f_tmp.write(f_line)
        f_line = f.readline
    #puis reecriture de f_tmp dans f
    C'est bien sur juste un code exemple pour illustrer. Là tu lit le fichier ligne à ligne (ce qui est mieux, surtout si tes fichiers sont très gros), puis dans chaque ligne, tu cherche ton caractère. Si tu le détectes, tu peut alors faire un insert.

    Cela te convient il?

    NB: la méthode replace peut aussi t'interesser, selon ton besoin precis

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 129
    Par défaut
    Waouh! Ca c'est de la réponse!
    J'étudie tout ça, je test et je reviens vers toi

    Merci beaucoup

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 129
    Par défaut
    Ben ça n'a pas l'air de fonctionner :

    rtr = f_line.find("}\n")
    AttributeError: 'builtin_function_or_method' object has no attribute 'find'

    EDIT : Il manquait le () à la fin de readline... Je continue à tester ton code

Discussions similaires

  1. Réponses: 9
    Dernier message: 19/03/2013, 15h58
  2. Chercher un caractère dans un fichier
    Par achrafkaran dans le forum Tcl/Tk
    Réponses: 5
    Dernier message: 20/10/2011, 19h05
  3. [Batch] Chercher chaines de caractères dans plusieurs fichiers
    Par stefanelle dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 28/01/2011, 11h21
  4. Réponses: 6
    Dernier message: 19/02/2010, 13h17
  5. chercher un caractère dans un fichier text
    Par stelaazurra dans le forum Windows Forms
    Réponses: 7
    Dernier message: 22/04/2009, 19h21

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