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 :

Impossible de chercher un string dans un fichier csv [Python 3.X]


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Bordeaux
    Inscrit en
    Janvier 2024
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Bordeaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2024
    Messages : 7
    Par défaut Impossible de chercher un string dans un fichier csv
    Coucou


    Avant tout bonjour à tous, je suis nouveau et je débute en python.J'ai un problème qui est probablement facile à résoudre pour les connaisseurs mais moi je cale un peu dessus

    J'ai un fichier csv dans lequel je veux trouver un string.Ce string est extrait d'un fichier texte afin de le retrouver dans le fichier csv.Ce string est le suivant ',55' (la virgule avant le nombre n'est pas une erreur).

    Le soucis c'est que je ne peux pas connaitre ce string à l'avance (le format à chercher est: ,XX ou XX sont des nombres) et une fois connu, mon code ne me trouve pas le string (donc ',55') dans mon fichier csv.

    L'objectif est de trouver le string dans le fichier csv et de print la ligne entière là ou le string a été trouvé.

    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
    import re
     
    f = open("troisignaux.txt", 'r', 1)  # Lit juste la première ligne à partir d'un fichier texte pour enregistrer le string qui nous intéresse
    line = f.readline()
    print(line)
     
    doublecheck = "," 
    phrase = line
    print(doublecheck + phrase)  # la virgule + la phrase contenant le string pour correspondre au format de ma recherche ',XX'
    power = doublecheck + phrase
    print(power)
    w = power
    print(w)
    with open('midvalues1.csv') as f:  # recherche dans le fichier csv du string obtenu via le fichier texte pour print la ligne entière correspondante ou le string a été trouvé
        found = False
        for line in f:
            if w in line:     # Pourquoi ici w n'est pas pris en compte ? le code ne me renvoie pas d'erreur pour autant
                print(line)
                found = True
        if not found:
            print('Data not found!')

    Si je mets directement ',55' ligne 17 à la place de w ça fonctionne :if ',55' in line:.

    Comment passer la valeur de w ligne 17 pour que le string recherché soit pris en compte ?


    Merci à vous

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    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 827
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Diftong633 Voir le message
    Si je mets directement ',55' à cette ligne à la place de power ça fonctionne :

    Comment passer la valeur de w ligne 18 pour que le string recherché soit pris en compte ?
    Formatage de strings
    • if ",%d" % power in line
    • if ",{0}".format(power) in line
    • if f",{power}" in line

    Le choix de la syntaxe dépendant des goûts de chacun (personnellement je n'aime pas du tout la 3° malgré certains avantages qu'elle offre).
    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 du Club
    Homme Profil pro
    Bordeaux
    Inscrit en
    Janvier 2024
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Bordeaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2024
    Messages : 7
    Par défaut
    Bonjour,

    merci pour ta contribution

    Cependant il détecte qu'il y a bien le string dans le fichier csv mais n'imprime pas la ligne ou il est trouvé.J'ai mis un break car sinon il me print "Ok" sans cesse avant de me dire qu'il ne l'a pas trouvé.

    output sans le break :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Ok
    Data not found!
    En mettant un break après que la condition soit "True" :


    ,55

    Ok
    Data not found!
    J'ai essayé les trois formatages possibles pourtant.Voici le code (avec le break) :

    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
    import re
     
    f = open("troisignaux.txt", 'r', 1)  # Lit juste la première ligne
    pw = f.readline()
    print(pw)
     
    doublecheck = ","
    phrase = pw
    power = doublecheck + phrase
    w = power
    print(w)
    with open('midvalues1.csv') as csv:
        found = False
        for line in csv:
            if ",{0}".format(w) in line: # Key line: check if `w` is in the line.
                print(line)
                found = True
            print('Ok')
            break
        if not found:
            print('Data not found!')
    EDIT: en regardant bien "Ok" est print 41 fois soit le nombre total de lignes dans mon fichier csv.Ça change pas le problème mais bon si ça peut aider à le résoudre...

    Merci à ceux qui passent par là

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    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 827
    Billets dans le blog
    1
    Par défaut
    Il y a trop de variables inutiles dans ton code (w, power, doublecheck, phrase, ...). Et puis le break dans le for fait que tu ne lis qu'une ligne !!!

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    with open("troisignaux.txt", 'r') as fp: data = ",{0}".format(fp.readline().strip())
    # Pas certain que mettre "1" en 3° paramètre (celui de buffering) signifie "lire 1 ligne"
     
    with open("midvalues1.csv", "r") as csv:
    	found = False
    	for line in csv:
    		if data in line:
    			print(line)
    			found = True
    		# if
    	# for
    # with
    if not found: print('Data not found!')
    Déjà le "," je le mets immédiatement (pourquoi en effet le mettre à chaque itération). Et je pense aussi que le '\n' situé dans chaque ligne du fichier texte (donc y compris la première) ne doit pas aider (d'où le strip() pour le virer)
    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]

  5. #5
    Membre du Club
    Homme Profil pro
    Bordeaux
    Inscrit en
    Janvier 2024
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Bordeaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2024
    Messages : 7
    Par défaut
    Merci ! c'est exactement ce que je recherchai

  6. #6
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 060
    Par défaut
    Bonjour,

    Ce string est le suivant ',55' (la virgule avant le nombre n'est pas une erreur).

    Le soucis c'est que je ne peux pas connaitre ce string à l'avance (le format à chercher est: ,XX ou XX sont des nombres) et une fois connu, mon code ne me trouve pas le string (donc ',55') dans mon fichier csv.
    Ça sent quand même la mauvaise analyse du problème.

    • Est-ce que la virgule ne représenterait pas le caractère de séparation des colonnes du fichier csv ?
    • Est-ce que la seule valeur intéressante que se soit ,55 ou 55 qui soit trouvé, ne serait pas 55 ?
    • Que se passe-t-il si la ligne commence par 55 ?

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    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 827
    Billets dans le blog
    1
    Par défaut
    • Est-ce que la virgule ne représenterait pas le caractère de séparation des colonnes du fichier csv ?
    • Est-ce que la seule valeur intéressante que se soit ,55 ou 55 qui soit trouvé, ne serait pas 55 ?
    • Que se passe-t-il si la ligne commence par 55 ?
    En résumé: ne devrait-on pas envisager de parser le fichier par le module csv pour en extraire les valeurs avant de chercher spécifiquement la valeur 55 ?
    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
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 060
    Par défaut
    Sve@r,

    C'est ça en effet, mais même sans le module csv, rien de très complexe à faire une recherche ligne par ligne du nombre avec la méthode find par exemple.

    EDIT: Par contre faudrait savoir la limite de ces nombres, si on a un nombre 550, c'est loupé !

  9. #9
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 322
    Par défaut
    Et si la valeur est 55X...
    Et si 55 est dans la colonne 8 , 9 ou 10 alors que nous le cherchons dans la colonne 2

  10. #10
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 060
    Par défaut
    Et si 55 est dans la colonne 8 , 9 ou 10 alors que nous le cherchons dans la colonne 2
    Peu importe, une fois un 55 de trouvé, on affiche la ligne

  11. #11
    Membre du Club
    Homme Profil pro
    Bordeaux
    Inscrit en
    Janvier 2024
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Bordeaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2024
    Messages : 7
    Par défaut
    Dans mon fichier csv je peux pas me permettre d'afficher toute les lignes ou 55 est trouvé,ça serait l'enfer

    Le filtrage de la virgule avant me permet d'etre sur de la valeur.

  12. #12
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 060
    Par défaut
    Bonjour,

    Dans mon fichier csv je peux pas me permettre d'afficher toute les lignes ou 55 est trouvé,ça serait l'enfer
    Vous souhaitez donc éviter les lignes commençant par 55 ?

  13. #13
    Membre du Club
    Homme Profil pro
    Bordeaux
    Inscrit en
    Janvier 2024
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Bordeaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2024
    Messages : 7
    Par défaut
    Bonjour


    Pour résumé mon fichier csv comporte beaucoup de lignes et 15 colonnes.Je fais un premier tri avec pandas pour ne garder que les 5 qui me seront vraiment utiles.Dans ces 5 colonnes, chaque donnée dans les lignes est séparée par des virgules.

    Je ne peux pas savoir a l'avance le nombre qui me sera utile mais je connais le format de ce que je cherche c'est à dire ,XX car meme si je ne connais pas le nombre exact à l'avance, je sais que c'est unité et dizaine.Si je cherchais juste 55 comme dans l'exemple, j'aurais plein de faux positif au vu de l'ensemble des données dans le fichier.

    Le fait de chercher la virgule juste avant le nombre XX me permet d'etre certain que le XX qui suit est bien le nombre que je recherche.

  14. #14
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 060
    Par défaut
    et que faîtes vous des lignes commençant par 55, ?


  15. #15
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    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 827
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Diftong633 Voir le message
    Dans ces 5 colonnes...
    Le fait de chercher la virgule juste avant le nombre XX me permet d'etre certain que le XX qui suit est bien le nombre que je recherche.
    Tu parses ta ligne par le module csv (parce que des champs séparés par une virgule c'est la définition du CSV) et tu te retrouves avec 5 champs (puisque 5 colonnes). Ensuite tu regardes si l'un des champs contient 55.
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> data=(1, 17, 44, 55, 123)
    >>> print(55 in data)
    True
    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]

  16. #16
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    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 715
    Par défaut
    Citation Envoyé par Diftong633 Voir le message
    Pour résumé mon fichier csv comporte beaucoup de lignes et 15 colonnes.Je fais un premier tri avec pandas pour ne garder que les 5 qui me seront vraiment utiles.Dans ces 5 colonnes, chaque donnée dans les lignes est séparée par des virgules.
    Pourquoi ne pas chercher directement dans le tableau pandas?

    note: il est vrai que votre question était de fabriquer une variable à partir de littéraux... ce qui signifie que vous utilisez pandas sans trop connaître les bases du langage. Ce qui explique peut être cela.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  17. #17
    Membre du Club
    Homme Profil pro
    Bordeaux
    Inscrit en
    Janvier 2024
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Bordeaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2024
    Messages : 7
    Par défaut
    Bonjour,

    Effectivement je suis débutant en python


    Je sais qu'avec pandas je peux trouver la colonne et la ligne exacte qui m'intéresse mais je ne sais pas à l'avance laquelle va me servir vu que j'ai beaucoup de données à traiter dans le fichier csv.

  18. #18
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 060
    Par défaut
    Effectivement je suis débutant en python
    Et votre besoin n'est pas clairement exprimé, on ne traite pas un fichier csv de cette manière, la virgule est une séparation pour l'écriture de chaque colonne d'une ligne.

    On ne comprend pas pourquoi vous souhaitez absolument une recherche sur ,55 et pas sur 55, pour écrire une ligne du fichier par exemple...

    mais je ne sais pas à l'avance laquelle va me servir
    Ça fait partie de la logique métier, donc en gros c'est votre métier de la comprendre, afin de déterminer ce qui est utile ou non, sur ce point on ne peut rien faire pour vous !

    j'ai beaucoup de données à traiter dans le fichier csv
    Peu importe ce n'est pas un problème pour python, il sait faire avec les modules pandas, csv et même en le prenant comme un fichier texte standard.
    La manière peu importe, l'essentiel est d'avoir le résultat escompté, mais encore faut-il que vous sachiez le résultat attendu (logique métier).

    Exprimer mieux la problématique, créer une liste de lignes de vos fichiers csv, le résultat attendu en y omettant pas d'y ajouter les pièges, c'est à dire des lignes qui ne doivent pas être prises en compte par ex.
    Ça ne devrait pas être compliqué si vous maîtrisez un minimum le sujet !

  19. #19
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    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 715
    Par défaut
    Citation Envoyé par Diftong633 Voir le message
    Je sais qu'avec pandas je peux trouver la colonne et la ligne exacte qui m'intéresse mais je ne sais pas à l'avance laquelle va me servir vu que j'ai beaucoup de données à traiter dans le fichier csv.
    Si vous partez de 15 colonnes pour en filtrer 5 dans lesquelles chercher... vous savez.
    D'autant qu'à priori ces colonnes doivent correspondre à des données métiers: on ne va pas chercher 180 dans la colonne Age mais plutôt dans la colonne Taille.
    => vous connaissez les colonnes.

    Normalement, avant d'utiliser pandas, vous devriez connaître assez Python pour faire ces opérations de filtre sans pandas: lire le fichier ligne par ligne, tester les valeurs des colonnes intéressantes pour savoir si la ligne est à sélectionner. Il faudra juste écrire plus de lignes de code (qu'avec pandas).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

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

Discussions similaires

  1. [XL-2003] Chercher un string dans un fichier texte
    Par apnw7931 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 04/10/2011, 16h09
  2. Comment chercher un mot dans un fichier texte et le modifier?
    Par Ange_1987 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 13/05/2009, 18h24
  3. chercher un caractère dans un fichier text
    Par stelaazurra dans le forum Windows Forms
    Réponses: 7
    Dernier message: 22/04/2009, 19h21
  4. Comment chercher une valeur dans un fichier text?
    Par lili81 dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/06/2008, 16h18
  5. écrire un String dans un fichier texte
    Par Flagada dans le forum C++Builder
    Réponses: 4
    Dernier message: 22/01/2007, 16h49

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