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 un fichier en fonction des mots d'une liste


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mai 2019
    Messages : 67
    Par défaut trouver un fichier en fonction des mots d'une liste
    bonjour,

    je désire un peu d'aide car je bloque sur la suite;
    j'aimerai savoir quel méthode utiliser pour pouvoir trouver un fichier(.PDF) donc les mots correspondent a la chaine de caractère.
    pour exemple ci dessous via le code serait de trouver le fichier qui contient comme mots 'CHAINE' et 'CARACTERES'
    voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import os
    ch = "VOICI_UNE_CHAINE_DE_CARACTERE_COMME_EXEMPLE"
    ch1 = ch.replace('_', ' ').split()
    chaine = set(ch1)
    les_mots = set(('MAISON', 'VILLE', 'CHAINE', 'ARBRE', 'CARACTERE'))
    mots = chaine&les_mots
    x = list(mots)
    y = " ".join(map(str, x))
     
    print(y)
    ..........
    merci encore pour votre aide

  2. #2
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    915
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 915
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    j'aimerai savoir quel méthode utiliser pour pouvoir trouver un fichier(.PDF) donc les mots correspondent a la chaine de caractère.
    Regarde du côté de glob():
    Le code présenté ci-dessous va lister tous les fichiers pdf du répertoire courant dont le nom comprends les mots CHAINE et CARACTERE .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from pathlib import Path
    p=Path('.')
    print(*p.glob('*CHAINE*CARACTERE*.pdf'))

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mai 2019
    Messages : 67
    Par défaut
    merci pour ton retour,
    petite question, dans mon code c'est la variable qui contient les mots en question, les mots sont complétement aléatoire en fonction de la chaine de caractère.
    est ce que le glob peut faire une recherche via une variable(dont elle contient les mots?

    merci

  4. #4
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    915
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 915
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par frederic2710 Voir le message
    merci pour ton retour,
    petite question, dans mon code c'est la variable qui contient les mots en question, les mots sont complétement aléatoire en fonction de la chaine de caractère.
    est ce que le glob peut faire une recherche via une variable(dont elle contient les mots?

    merci
    Comme tu peux le voir l'argument de glob() est une string, donc oui !. (il te suffit de formater ta chaine avec format() ou une fstring)

  5. #5
    Membre éclairé

    Inscrit en
    Novembre 2008
    Messages
    423
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 423
    Par défaut
    Bon Apparemment, je me suis fait griller :-)
    Et en plus, je ne répond pas à la question mais bon, j'avais mal compris.


    Déjà tu peux splitter par rapport à un caractère donné (ça ne fait pas avancer ton problème mais bon).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import os
    ch = "VOICI_UNE_CHAINE_DE_CARACTERE_COMME_EXEMPLE"
    ch1 = ch.split('_')
    de même
    voire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print(" ".join(mots)) # join marche aussi sur un set
    suffit (quoiqu'il semble que ça dépend des version de python... Pour ma part, je n'ai jamais eu de problème avec ça)

    Pour le reste, je ne comprends pas la question.
    Les mots, ils sont censés venir d'où ? Tu les cherches dans les noms de fichiers ? dans le contenu des fichiers ?

    Pour naviguer dans une arborescence de fichiers, tu peux travailler avec os.walk
    Si tu veux ouvrir des fichiers pdf et travailler avec leur contenu, il va falloir utiliser des outils qui peuvent interagir avec du pdf.

    https://realpython.com/pdf-python/

    Pour des fichiers textes (plus simple, pour l'exemple), ça pourrait donner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    import os
    import fnmatch
    import re
    wordset = set("les mots que je veux trouver".split())
    for root, dirs, files in os.walk("path/to/the/root/dir"):
        for fname in fnmatch.filter(files, '*.txt'):
            print(fname)
            with open(os.path.join(root, fname), encoding="utf-8") as inf:
                fwordset = re.split('\W+', inf.read())
                print(" ".join(wordset & fwordset))

  6. #6
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    915
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 915
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par fatbob Voir le message

    Pour des fichiers textes (plus simple, pour l'exemple), ça pourrait donner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    import os
    import fnmatch
    import re
    wordset = set("les mots que je veux trouver".split())
    for root, dirs, files in os.walk("path/to/the/root/dir"):
        for fname in fnmatch.filter(files, '*.txt'):
            print(fname)
            with open(os.path.join(root, fname), encoding="utf-8") as inf:
                fwordset = re.split('\W+', inf.read())
                print(" ".join(wordset & fwordset))
    Le code renvoit une exception ...
    Perso, quand on a gouté à grep...

  7. #7
    Membre éclairé

    Inscrit en
    Novembre 2008
    Messages
    423
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 423
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    Le code renvoit une exception ...
    Perso, quand on a gouté à grep...
    C'est quoi, comme exception ? Un problème d'encodage ? J'ai des fichiers en utf8 mais si ils sont dans un autre format, ça plante.

    Cela dit, c'est vrai que grep est un bon outil... Sous linux...
    Et puis après, ça dépend de ce que tu veux faire des résultats...

  8. #8
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mai 2019
    Messages : 67
    Par défaut
    mon test me renvoi un generator object Path.glob
    voici le code modifié:

    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
    from pathlib import Path
     
    ch = "VOICI_UNE_CHAINE_DE_CARACTERE_COMME_EXEMPLE"
    ch1 = ch.replace('_', ' ').split()
    chaine = set(ch1)
    les_mots = set(('MAISON', 'VILLE', 'CHAINE', 'ARBRE', 'CARACTERE'))
    mots = chaine&les_mots
    x = list(mots)
    y = " ".join(map(str, x))
     
    p = Path(".")
    test = p.glob(y+'.pdf')
     
    print(test)
    merci

  9. #9
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    915
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 915
    Billets dans le blog
    7
    Par défaut
    oui c'est un générateur.
    Pour le voir, tu peux par exemple construire une liste avec:

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 29/06/2019, 11h56
  2. Réponses: 6
    Dernier message: 12/12/2016, 20h56
  3. Réponses: 5
    Dernier message: 04/06/2016, 21h38
  4. [XL-2003] Suppression de lignes qui contiennent des mots d'une liste
    Par fortbelin dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 12/09/2011, 15h47
  5. Réponses: 2
    Dernier message: 05/01/2011, 09h34

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