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 :

Obtenir la valeur de la cellule d'à côté de celle où se trouve un mot dans un fichier csv avec Python


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2022
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2022
    Messages : 22
    Par défaut Obtenir la valeur de la cellule d'à côté de celle où se trouve un mot dans un fichier csv avec Python
    Bonjour.

    J'ai un fichier csv de milliers de lignes avec 3 colonnes.
    J'ai créé une interface dans laquelle l'utilisateur rentre un mot, et ensuite quand il clique sur valider, il faut que le programme aille chercher le mot dans un fichier csv (et il s'y trouve forcément par contre, il n'y a pas la possibilité qu'il ne s'y trouve pas) puis me renvoie la valeur qui se trouve au niveau de la même ligne, mais dans la cellule d'à côté. Les mots sont dans la 3è colonne, les valeurs numériques dans la 2è.

    Vous savez comment faire ça avec Python ?

    J'ai essayé en passant par pandas, en utilisant un enumerate, en passant par un readlines() et en faisant une fonction mais rien ne marche.

    Par exemple ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    data = pd.read_csv('data2021_2.csv', delimiter=';', index_col="COL1")
    print(df[df['COL3']==x].index.values)
    first = data.loc["mavaleur"]
    print(first)
    x étant égal à entry1.get(), afin d'extraire le mot que l'utilisateur a écrit dans l'interface.

    Merci d'avance.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Chercher une chaîne de caractères dans une liste de listes est ce qu'on a appris dans n'importe quel tuto (avant de faire de petits projets).... donc oui on devrait savoir faire çà (avant même de se lancer dans pandas).

    Qu'est ce qui vous bloque?

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

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2022
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2022
    Messages : 22
    Par défaut
    Le problème c'est que la valeur entrée par l'utilisateur est à chaque fois différente, donc je la mets dans une variable et quand je mets le nom de ma variable dans mon programme rien ne marche.
    Si je mets littéralement le mot recherché entre guillemets dans mon code, ça le trouve, mais quand je mets la variable x (qui est =entry1.get()) ça ne marche pas.

    Et je ne sais pas très bien faire ça avec un fichier csv, je ne sais pas comment appeler chaque ligne, je ne suis pas avec une liste du type liste=[pomme, poire, orange].

    Mais j'en conviens, j'ai des lacunes, même en étant en école d'ingénieur. On n'a pas du tout de cours d'informatique, juste 2-3 TP sur le tas, on apprend (essaye d'apprendre) tout tout seul de façon sauvage avec ce qu'on peut bien trouver en ligne. Je m'en vois désolé mais je veux apprendre.

  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,

    ne serait-il pas plus efficace de stocker le contenu du fichier CSV dans une base de données style SQLite3 et requêter la table avec le mot fourni par l'utilisateur pour renvoyer la valeur voulue ?

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2022
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2022
    Messages : 22
    Par défaut
    Je vais essayer, merci du conseil.

    @wiztricks

    Pour m'afficher la ligne entière du fichier csv où se trouve le mot :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    import csv
    import sys
     
     
    com = input('Entrez la commune à trouver\n')
     
    csv_file = csv.reader(open('commune2021_2.csv', "r"), delimiter=",")
     
    for row in csv_file:
       if com == row[2]:
           print (row)
    Est-ce que ceci vous semble juste ?
    Ca ne fonctionne pas pourtant. J'obtiens un list index out of range, même si les communes sont dans la 3è colonne donc à l'index numéro 2.

    Et si je mets row[0], je n'ai plus d'erreur et j'obtiens comme réponse dans le shell ceci : >>>
    En gros il ne se passe rien.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par nsl31 Voir le message
    Est-ce que ceci vous semble juste ?
    Ca ne fonctionne pas pourtant.
    Si ça ne fonctionne pas, c'est que ce n'est pas juste... et si l'accès à row[2] lève un "index out of range", c'est que row ne contient pas le nombre de colonnes que vous espériez.
    Reste à regarder à quoi ressemble row et réfléchir à la cause (probablement un mauvais délimiteur et/ou une ligne bizarre dans le fichier).

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

  7. #7
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    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 323
    Par défaut
    bonjour
    Citation Envoyé par nsl31 Voir le message
    Ca ne fonctionne pas pourtant. J'obtiens un list index out of range, même si les communes sont dans la 3è colonne donc à l'index numéro 2.

    Et si je mets row[0], je n'ai plus d'erreur et j'obtiens comme réponse dans le shell ceci : >>>
    C'est le fichier officiel insee "Code officiel géographique" ???
    Dans ce fichier, la deuxième colonne "COM" est le code postal
    Puisque c'est la seconde colonne, il faut tester dans notre liste : l'index 1 et pas 2 comme dans ton code (et toi qui parles de 3ème colonne ? )

    J'ai tenté de les nettoyer en effaçant certaines colonnes inutiles où il manquait des données à certaines lignes
    ps: ce fichier est un csv valide, il n'y a donc aucune bonne raison de le retravailler

    pourtant les documents officiels de l'INSEE que j'ai téléchargés
    l'officiel, c'est cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TYPECOM,COM,REG,DEP,CTCD,ARR,TNCC,NCC,NCCENR,LIBELLE,CAN,COMPARENT
    COM,01015,84,01,01D,011,1,ARBOYS EN BUGEY,Arboys en Bugey,Arboys en Bugey,0104,
    COMD,01015,,,,,1,ARBIGNIEU,Arbignieu,Arbignieu,,01015
    COM,01016,84,01,01D,012,1,ARBIGNY,Arbigny,Arbigny,0117,

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par Arioch Voir le message
    ne serait-il pas plus efficace de stocker le contenu du fichier CSV dans une base de données style SQLite3 et requêter la table avec le mot fourni par l'utilisateur pour renvoyer la valeur voulue ?
    Si c'est un fichier qui a une durée de vie courte et qu'on recherche les entrées colonne 2, un dictionnaire fabriqué une seule fois... et utilisé pour toutes les recherches devrait suffire (d'autant qu'on peut le sauvegarder via pickle).
    Après si on veut faire une "vraie" application, la petite base de données est une bonne piste. Mais si le PO ne sait pas mettre au point un programme de 10 lignes qui part en IndexError, il a du boulot côté tuto et exercices à faire pour maîtriser les bases.

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

Discussions similaires

  1. [XL-2016] Obtenir la valeur d'une cellule. Différement.
    Par Jenjango dans le forum Excel
    Réponses: 7
    Dernier message: 19/07/2018, 19h42
  2. Comment ajouter des valeurs dans un fichier CSV avec PERL?
    Par GandalfLeGris1 dans le forum Langage
    Réponses: 9
    Dernier message: 06/06/2018, 20h24
  3. [XL-2007] Valeur d'une cellule change automatiquement selon celle d'une autre cellule
    Par FrancisZheng dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 07/12/2015, 16h33
  4. Réponses: 3
    Dernier message: 23/04/2015, 08h50
  5. Réponses: 5
    Dernier message: 30/05/2006, 12h29

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