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 :

Exercice traitement de fichier CSV


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Juin 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Juin 2021
    Messages : 7
    Par défaut Exercice traitement de fichier CSV
    Bonjour pouvez-vous m'aider merci

    2) On donne un fichier csv en PJ sur Pronote. On a écrit le programme ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def fonction(f : str, s : str = ";") -> dict:
     a = open(f,'r')
     for i in a.readlines():
     print(i.strip('\n').split(s))
    fonction('exemple.csv')
    1. En testant ce programme avec Spyder ou VSCode, expliquez ligne par ligne ce que fait cette fonction.
    2. Ce code n'est pas aux normes PEP8 de bonne écriture de code Python. Réécrivez ce programme en renommant toutes les variables afin de rendre le code plus lisible.


    3) On souhaite maintenant enregistrer ce qui est produit à la ligne 4 et on doit modifier le programme. Réécrivez le programme en :
    • créant un tableau tabLigne
    • ajoutant chaque enregistrement (=ligne) dans une variable appelée tabLigne.
    • renvoyant tabLigne à la fin de la fonction.


    4) Finalement, pour importer un fichier CSV, nous avons besoin de dictionnaires contenant les en-têtes (variable header) et les valeurs. On dispose du programme suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def tableau2dictionnaire(tabLigne: list) -> list:
     header = tabLigne.pop(0)
     csvFile = []
     for ligne in tabLigne:
     enregistrement = dict()
     for indice in range(len(header)):
     enregistrement[…………………………]=…………………………
     csvFile.append(enregistrement)
     return csvFile
    1. Quelle ligne du fichier CSV contient les en-têtes ? À quelle ligne de tabLigne cela correspond-il ? Expliquez la ligne 2.
    2. Expliquez ligne par ligne ce qu'est censé faire cette fonction.
    3. Complétez cette fonction afin qu'il permette d'afficher ce résultat :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      Table = [{'Nom': 'Erwann', 'Français': '16', 'Science': '12', 'Histoire': '15'},
      {'Nom': 'Céline', 'Français': '14', 'Science': '16', 'Histoire': '13'}]

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Bonjour M. le directeur commercial
    Citation Envoyé par kestch13 Voir le message
    Bonjour pouvez vous m'aider merci
    Oui, généralement on peut aider (et je pense même qu'on y arrive assez souvent). Toutefois en ce qui te concerne je ne suis pas certain que tu sois réellement conscient de la façon dont nous voyons la définition du verbe "aider"...
    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
    Nouveau membre du Club
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Juin 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Juin 2021
    Messages : 7
    Par défaut merci
    C'est pour mon fils car il n'a pas de cours et on aimerait comprendre à travers votre aide

    c'est pour cette raison qu'on vous demande de nous aider .

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par kestch13 Voir le message
    C'est pour mon fils car il n'a pas de cours et on aimerait comprendre à travers votre aide
    Il existe tout un tas de cours et tutoriels Python gratuits sur le net (si tu veux je te file le mien). Le site fun-mooc propose même gratuitement des cours avec évaluation finale et délivrance d'un certificat.
    Accessoirement cet énoncé contient des notions et instructions Python assez évoluées qui sont bien au dessus d'un niveau de débutant Python.

    Citation Envoyé par kestch13 Voir le message
    c'est pour cette raison qu'on vous demande de nous aider .
    Désolé, je ne pense pas qu'il y ait quelqu'un assez motivé pour réécrire ici et expliquer ce qui est déjà écrit et expliqué (parfois sur plusieurs pages) dans tous les tutos de débutants, surtout que si ton fils ne lit pas les tutos il ne lira pas plus ce qu'on écrira ici. D'autant plus qu'à priori, puisque c'est toi qui postes, c'est à toi qu'on va enseigner Python pour que tu le réenseignes (avec toutes les déformations liées à ton inexpérience) à ton fils?
    Si ton fils ne sait pas ce que fait str.strip() ou str.split() ou list.pop() ok ce n'est pas une honte mais qu'il commence par ouvrir un tuto à la première page (on a tous commencé ainsi). Parce que nous, on ne pourra pas l'aider à prendre le temps d'apprendre ni t'aider toi à prendre le temps d'apprendre à être prof de Python pour ton fils.
    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
    Nouveau membre du Club
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Juin 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Juin 2021
    Messages : 7
    Par défaut besoin d'aide
    pour la question 4 c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def tableau2dictionnaire(tabLigne: list) -> list:
     header = tabLigne.pop(0)
     csvFile = []
     for ligne in tabLigne:
     enregistrement = dict()
     for indice in range(len(header)):
     enregistrement[…………………………]=…………………………
     csvFile.append(enregistrement)
     return csvFile
    1. Quelle ligne du fichier CSV contient les en-têtes ? À quelle ligne de tabLigne cela correspond-il ? Expliquez la ligne 2.
    2. Expliquez ligne par ligne ce qu'est censé faire cette fonction.
    3. Complétez cette fonction afin qu'il permette d'afficher ce résultat :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      Table = [{'Nom': 'Erwann', 'Français': '16', 'Science': '12', 'Histoire': '15'},
      {'Nom': 'Céline', 'Français': '14', 'Science': '16', 'Histoire': '13'}]

    j'ai mis csvFile=('Table.csv') est ce que c'est juste

    merci pour vos réponses

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par kestch13 Voir le message
    j'ai mis csvFile=('Table.csv') est ce que c'est juste
    C'est juste par rapport à quoi? Il y a 3 questions "a", "b" et "c" et toi tu nous écris une instruction qui affecte une string à une variable sans même nous dire à quelle question tu réponds . Et comme cette variable est déjà précédemment utilisée dans csvFile = [] en plus tu supprimes son contenu initial.
    Et http://club.developpez.com/regles/#LIII-E.
    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]

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Juin 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Juin 2021
    Messages : 7
    Par défaut merci
    j'ai répondu à toute les questions sauf la c donc je complète la fonction mais c'est faux en fait peux tu m'aider pour la compléter afin d'afficher table=.......

    merci

  8. #8
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    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 062
    Par défaut
    Citation Envoyé par kestch13 Voir le message
    j'ai répondu à toute les questions sauf la c donc je complète la fonction mais c'est faux en fait peux tu m'aider pour la completer afin d'afficher table=.......
    Bonjour,

    Peux-tu montrer ce que tu as fais afin qu'on puisse t'indiquer où ça va pas ?

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Juin 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Juin 2021
    Messages : 7
    Par défaut
    1) La méthode .split() découpe une chaîne de caractères en plusieurs éléments appelés champs, en utilisant comme séparateur n'importe quelle combinaison « d'espace(s) blanc(s) ». (Un espace blanc (whitespace en anglais) correspond aux caractères qui sont invisibles à l'œil, mais qui occupent de l'espace dans un texte.
    Les espaces blancs les plus classiques sont l'espace, la tabulation et le retour à la ligne.)
    EXEMPLE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> animaux = "girafe tigre singe souris"
    >>>animaux.split()
    ['girafe', 'tigre', 'singe', 'souris']
    >>> for animal in animaux.split():
    ... print(animal)
    ...
    girafe
    tigre
    singe
    souris
    La méthode .strip() enlève les espaces situés sur les bords de la chaîne de caractère mais pas ceux situés entre des caractères visibles. En réalité, cette méthode enlève n'importe quel combinaison « d'espace(s) blanc(s) » sur les bords, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> chaine = " \tfonctionne avec les tabulations et les retours à la ligne\n"
    >>>chaine.strip()
    'fonctionne avec les tabulations et les retours à la ligne'
    La méthode .strip() est très pratique quand on lit un fichier et qu'on veut se débarrasser des retours à la ligne.
    2)
    1. Ligne 1 -> définition de la fonction nommé « fonction » avec 2 paramètres de type string qui retourne à un dictionnaire.
      Ligne 2 -> la variable « a » récupère les données du fichier avec l’url passé dans la variable « f » passée en paramètre.
      Ligne 3 -> boucle for tant qu’il y a des lignes à traiter (le contenu de la ligne dans la variable i readlines() lit toutes les lignes .
      Ligne 4 -> affiche les groupes mots qui sont séparés par le séparateur contenu dans s.
      Donc s= séparateur
      Ligne 5 -> On appelle la fonction en passant en paramètre le chemin d’accès d’un fichier. (‘exemple.csv’)

    2. Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      >>>ma_fonction(mon_fichier: str, sep=';': str)->dict:
      >>> withopen(mon_fichier,"r") as f:
      >>> for ligne in f:
      >>> print(ligne.strip('\n').split(sep))
      >>> return mon_fichier

    3)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>>ma_fonction(nom_fichier: str, sep=';': str)->dict:
    >>> tabLigne=[]
    >>>withopen(mon_fichier,"r") as f:
    >>> for ligne in f:
    >>> print(ligne.strip('\n').split(sep))
    >>> tabLigne.appen(ligne)
    >>> return tabLigne
    4)
    1. La ligne 2 du fichier csv contient les en-têtes .Cela correspond a la première ligne de tabLigne. Ligne 2 -> la variable en-tête récupère les données de la variable tabLigne et enlève du tableau la position 0 et le renvoie en valeur retour.
    2. Ligne 1 -> définition de la fonction nommé « tableau 2 dictionnaire » avec un paramètre de type tabligne qui retourne à une list.
      Ligne 2 -> la variable en-tête récupère les données de la variable tabLigne et enlève du tableau la position 0 et le renvoie en valeur retour..
      Ligne 3 ->i c’est la même chose que lorsqu’on fait tabLigne=().
      Ligne 4 -> boucle for tant qu’il y a des lignes à traiter (le contenu de la ligne dans la variable ligne tabLigne lit toutes les lignes.)
      On crée un nouveau dictionnaire enregistrement .
      Ligne 5 -> on boucle de indice=0 à la longueur de header -1 on parcourt les colonnes.
      Ligne 6 -> on remplit le dictionnaire avec la valeur correspondante à la colonne indiquée.
      Ligne 7 -> on ajoute l’enregistrement dans la liste csvFile.
      Ligne 8 -> on retourne la liste

    3. Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      def tableau2dictionnaire(tabLigne: list) -> list:
       header = tabLigne.pop(0)
      csvFile = []
      for ligne in tabLigne:
       enregistrement = dict()
      for indice in range(len(header)):
       enregistrement[header=tabLigne.pop(0)]= print(header)
       csvFile.append(enregistrement)
       return csvFile

    voici l'ensemble du travail

  10. #10
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    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 062
    Par défaut
    En admettant que se soit ce que vous proposez (indentation différente possible),

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def tableau2dictionnaire(tabLigne: list) -> list:    header = tabLigne.pop(0)
        csvFile = []
        for ligne in tabLigne:
            enregistrement = dict()
            for indice in range(len(header)):
                enregistrement[header = tabLigne.pop(0)] = print(header)
            csvFile.append(enregistrement)
     
        return csvFile
    Vous avez une erreur de syntaxe au niveau de la variable enregistrement[....], vous ne pouvez pas faire cela.

    Ce qu'on sait,

    En exécutant la fonction pour les deux variables qui nous intéressent,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    header = ['Nom', 'Français', 'Sciences', 'Histoire']
     
    ligne = ['Erwann', '16', '12', '15']
    Quand indice vaut 0, header[indice] = 'Nom' et ligne[indice] = 'Erwann' et ce qu'on veut c'est pouvoir enregistrer clé valeur dans un dictionnaire enregistrement, donc comment on fait cela ?

    si le dictionnaire est appelé d, on fera quelque chose de la forme d[cle] = valeur, ce qui équivaut à d = {cle: valeur}

    Est-ce que cela devient plus évident pour vous ?

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Juin 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Juin 2021
    Messages : 7
    Par défaut
    non pas du tout ....merci quand même pour votre réponse

  12. #12
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    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 062
    Par défaut
    non pas du tout ....merci quand même pour votre réponse


    Dommage, prenez le temps de relire, en attendant, essayez, car j'ai pas testé, la ligne enregistrement[header[indice]] = ligne[indice]

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Juin 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Juin 2021
    Messages : 7
    Par défaut
    Citation Envoyé par fred1599 Voir le message


    Dommage, prenez le temps de relire, en attendant, essayez, car j'ai pas testé, la ligne enregistrement[header[indice]] = ligne[indice]

    merci beaucoup pour toutes vos réponses

  14. #14
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    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 062
    Par défaut
    merci beaucoup pour toutes vos réponses
    De rien, c'est fonctionnel au moins ?

Discussions similaires

  1. Demande d'aide pour extraire des données Excel à l'aide python
    Par userinfo dans le forum Général Python
    Réponses: 5
    Dernier message: 05/01/2013, 11h45
  2. Aide Python et Apache 2
    Par otobenzina dans le forum Linux
    Réponses: 1
    Dernier message: 12/05/2012, 10h04
  3. aide python et apache2
    Par otobenzina dans le forum Apache
    Réponses: 1
    Dernier message: 12/05/2012, 01h09

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