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 :

trouver une chaine dans un fichier quelquesoit sa casse


Sujet :

Python

  1. #1
    Membre actif Avatar de Zembla
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 95
    Par défaut trouver une chaine dans un fichier quelquesoit sa casse
    Bonjour,
    je voudrais que le résultat d'une recherche sur un texte dans un fichier soit insensible à la casse
    exemple, dans un texte j'ai le mot Poésie, mais si j'entre dans l'input "poésie" (sans majuscule) il ne match pas.
    J'ai regardé du coté des Regex et de la methode re.IGNORECASE , mais comment l'utiliser dans le cas present ?

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import os
    rep_cour = os.getcwd()
     
    file = open(rep_cour+"/data/testmultiple/text1.txt","r")
     
     
    search_word = input("enter a word you want to search in file: ")
     
    if(search_word in file.read()):
        print("word found")
    else:
        print("word not found")
    merci

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 815
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Zembla Voir le message
    J'ai regardé du coté des Regex et de la methode re.IGNORECASE , mais comment l'utiliser dans le cas present ?
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> sss="azertyuiop"
    >>> import re
    >>> re.search("tY", sss)
    >>> re.search("tY", sss, re.IGNORECASE)
    <re.Match object; span=(4, 6), match='ty'>
    >>>

    Citation Envoyé par Zembla Voir le message
    file = open(rep_cour+"/data/testmultiple/text1.txt","r")
    file = open(os.path.join(rep_cour, "data", "testmultiple", "text1.txt"), "r").
    Et éviter d'utiliser pour ses noms de variables des noms de type (ie "file")
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre actif Avatar de Zembla
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 95
    Par défaut
    merci sv@r
    je vais regarder ça

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 603
    Par défaut
    Bonjour,

    Contenu de mon fichier 'poesie.txt' :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    poème
    poète
    posix
    poésie
    popo et zi
    poésie
    Et le p'tit bout de 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
    from pathlib import Path
     
     
    def main() -> None:
        '''Main function'''
        search: str = 'poésie'
        with Path('textes', 'poesie.txt').open() as lines:
            for line in lines:
                if search in line.lower():
                    print(f'matched : {line.strip()}')
     
     
    if __name__ == '__main__':
        main()
    Output :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    matched : poésie
    matched : poésie

  5. #5
    Membre actif Avatar de Zembla
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 95
    Par défaut
    bonjour Arioch,
    merci pour ta réponse.

    si je mets
    search = 'Poésie' ' à la place de search = 'poésie' il ne trouve pas.

    Ce que je souhaite faire c'est trouver par exemple le mot poésie , quelque soit la casse dans le texte cible.

    Par exemple j'entre poésie et il me sort (si ces mots dans ces casse là existent)

    poésie
    Poésie
    POÉSIE

  6. #6
    Membre actif Avatar de Zembla
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 95
    Par défaut
    avec la methode casefold() ça semble marcher

    https://docs.python.org/3/library/stdtypes.html

    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
    import os
     
    rep_cour = os.getcwd()
     
    def trouveText():    
     
        texte = open(os.path.join(rep_cour, "data","testmultiple", "text4.txt"), "r")
        for t in texte:
            if search.casefold() in t.casefold():
                print(t.strip())
     
     
    search = input('entrez un texte : ')
     
    trouveText()

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 815
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Zembla Voir le message
    si je mets
    search = 'Poésie' ' à la place de search = 'poésie' il ne trouve pas.
    Normal, il est parti du principe que tu demanderais un mot en minuscules et il convertit tout ce qui est lu en minuscules pour faire la recherche
    En fait il faut remplacer if search in line.lower() de son code par if search.lower() in line.lower().

    Citation Envoyé par Zembla Voir le message
    avec la methode casefold() ça semble marcher
    Exact. Mais tu remarqueras que c'est quasiment ce qu'a fait Arioch. Juste que tu convertis le mot à rechercher là où il a oublié de le faire.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 603
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Normal, il est parti du principe que tu demanderais un mot en minuscules et il convertit tout ce qui est lu en minuscules pour faire la recherche
    En fait il faut remplacer if search in line.lower() de son code par if search.lower() in line.lower().
    J'étais effectivement parti de ce principe là.

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

Discussions similaires

  1. [WD25] Trouver une chaine dans un fichier texte
    Par dewe64y dans le forum WinDev
    Réponses: 16
    Dernier message: 03/07/2020, 23h44
  2. insérer une chaine dans un fichier XML
    Par 242 dans le forum Linux
    Réponses: 2
    Dernier message: 14/12/2006, 16h32
  3. detruire une chaine dans un fichier texte
    Par rober dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 08/11/2006, 09h27
  4. ecrire une chaine dans un fichier [prob]
    Par rogerio dans le forum C++
    Réponses: 5
    Dernier message: 31/05/2006, 02h20
  5. Réponses: 15
    Dernier message: 26/03/2006, 12h10

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