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 :

Lire et extraire des données d'un fichier CSV


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Lire et extraire des données d'un fichier CSV
    Bonjour à tous,

    J'espère poster ce message dans la bonne section. Je suis actuellement à dans une université étrangère et j'ai choisi un cours Python pour y avoir quelques bases mais je ne pensais pas que cela serait aussi dur.

    Pour commencer je dois lire un fichier csv en python et c'est déjà ici que je bloque:

    Le fichier comporte : user_id (espace) app_name

    Je suis dans le terminal python et je lance la commande suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Python 3.5.2 |Anaconda 4.2.0 (32-bit)| (default, Jul  5 2016, 11:45:57) [MSC v.1900 32 bit (Intel)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
     
    >>> import csv #pour charger la bibliothèque
    >>> with open('C:\Users\anne\Desktop\appsUsage.csv','rb') as f:
    ... reader=csv.reader(f)
      File "<stdin>", line 2
        reader=csv.reader(f)
             ^
    IndentationError: expected an indented block

    Alors que je voulais taper toute cette commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import csv
    with open('some.csv', newline='') as f:
        reader = csv.reader(f)
        for row in reader:
            print(row)

    Faut-il bien que je revienne à la ligne à chaque commande ? (ALT+entrée)
    Savez-vous d'où peut venir cette erreur?

    Merci par avance pour votre aide

  2. #2
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 609
    Points : 2 073
    Points
    2 073
    Par défaut
    Après les deux points (":"), il faut taper "Enter" puis "Tab" pour indenter.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci marco056 ! C'était vraiment tout bête en effet.

    Je peux désormais afficher ce fichier de données sur mon terminal

    Cependant j'ai un problème au niveau de l'algorithmique que je dois maintenant faire:

    Le fichier csv que j'ai est comme suit: user_id (espace) app_name

    Je dois pour chaque "user_id" compter le nombre de "app_name" différents et les afficher dans un nouveau fichier csv.

    Par exemple: si mon fichier appsUsage.csv est comme le suivant

    a facebook
    a facebook
    a linkedin
    b google
    b yahoo
    b yahoo

    Alors le fichier de sortie devra être:

    a facebook 2
    a linkedin 1
    b google 1
    b yahoo 2

    Mon problème est que je ne comprends pas comment à la fois extraire ces données de mon premier fichier puis de les réécrire dans un nouveau.

    Si vous avez des pistes je suis preneur

    Merci par avance !

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 332
    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 332
    Points : 36 852
    Points
    36 852
    Par défaut
    Salut,

    Citation Envoyé par alexgrand Voir le message
    Mon problème est que je ne comprends pas comment à la fois extraire ces données de mon premier fichier puis de les réécrire dans un nouveau.

    Si vous avez des pistes je suis preneur
    Si vous utilisez le module csv, lire la documentation et s'inspirer des exemples est déjà un bon début.

    - W

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci pour ce lien !

    J'ai essayé d'écrire l'algorithme suivant mais la syntaxe n'est pas bonne du tout:
    J'ai l'idée mais je ne connais pas la syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    >>> import csv
    >>> with open (‘C:\\Users\\anne\\Desktop\\appsUsage.csv’) as f:     #j'ouvre le fichier
    	reader = csv.reader(f)
            for line in reader:
                   if line is equal then                                                     #si la ligne est la même (user_id et app_name) je copie cette ligne et j'écris dans un nouveau
                           with open('output.csv', 'w', newline='') as f:           #fichier
                           writer = csv.writer(f)
                           writer.writerows(someiterable)
    Il faut encore que je rajoute une colonne dans le fichier de sortie pour savoir combien de fois elle est répétée.

    Peux-t-on ouvrir deux fichiers en même temps ?

    Si vous pouvez m'aider à corriger la syntaxe en python

    merci par avance

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 332
    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 332
    Points : 36 852
    Points
    36 852
    Par défaut
    Salut,

    Citation Envoyé par alexgrand Voir le message
    J'ai essayé d'écrire l'algorithme suivant mais la syntaxe n'est pas bonne du tout:
    J'ai l'idée mais je ne connais pas la syntaxe
    Dans ce cas, il vous faut prendre le temps d'ouvrir un tuto. et y apprendre les constructions de base.
    Le seul intérêt de ce genre d'exercice est de vous faire réviser ce que vous avez appris en cours et de vous forcer à pratiquer la programmation (pour voir comment la bête réagit et vous familiariser avec les messages d'erreur)... recopier une solution ne vous servirait à rien.

    - W

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Points : 482
    Points
    482
    Par défaut
    Citation Envoyé par alexgrand Voir le message
    Peux-t-on ouvrir deux fichiers en même temps ?

    Si vous pouvez m'aider à corriger la syntaxe en python

    merci par avance
    Bonjour,

    Dans votre code vous ouvrez et créez pour chaque lecture de ligne le même fichier 'output.csv'.
    D'une, le mode d'ouverture 'w' va recréer un fichier vierge et donc perdre la précédente écriture, auquel cas il vaut mieux utiliser 'a' pour append/ajouter.

    help(open)

    ========= ===============================================================
    Character Meaning
    --------- ---------------------------------------------------------------
    'r' open for reading (default)
    'w' open for writing, truncating the file first
    'x' create a new file and open it for writing
    'a' open for writing, appending to the end of the file if it exists
    'b' binary mode
    't' text mode (default)
    '+' open a disk file for updating (reading and writing)
    'U' universal newline mode (deprecated)
    ========= ===============================================================
    Et de deux, ouvrir un même fichier sans arrêt est une très mauvaise méthode car il va ralentir votre code et faire travailler sans cesse votre disque pour ouvrir, écrire la mémoire du buffer dans le fichier et puis fermer.
    Il vaut donc mieux l'ouvrir avant la boucle de lecture, de cette manière:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    with f_in:
        with f_out:
            for line in f_in:
                ...



    juste un conseil, l'utilisation de la syntaxe with est une bonne méthode mais pour débuter vous devriez plutôt utiliser la déclaration open() classique, sans le with.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    f_out = open('output.csv', 'w', newline='')
    (...)
    f_out.close() # implicite en utilisant with lorsqu'il en sort
    Ce qui vous évitera les indentations dû au with
    De plus, je pense qu'il faudrait d'abord pouvoir comprendre ce que fait with par rapport à l'instance d'open, à savoir le principe d'une classe et des méthodes appelées par with: __enter__ et __exit__

    Sinon pour répondre à votre question, c'est comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    with open(input_file_name, mode='r') as f_in, open(output_file_name, mode='w', newline='') as f_out:
            f_reader = csv.reader(f_in, dialect=csv.excel_tab)
            f_writer = csv.writer(f_out, dialect=csv.excel_tab)

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par YCL-1 Voir le message

    Sinon pour répondre à votre question, c'est comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    with open(input_file_name, mode='r') as f_in, open(output_file_name, mode='w', newline='') as f_out:
            f_reader = csv.reader(f_in, dialect=csv.excel_tab)
            f_writer = csv.writer(f_out, dialect=csv.excel_tab)
    Merci beaucoup ! C'est exactement ce qui me manquait dans mon code

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Du coup voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    >>>import csv 
    with open(‘C:\\Users\\anne\\Desktop\\appsUsage.csv’, mode='r') as f_in,
    open(‘C:\\Users\\anne\\Desktop\\appsIndividualUsage.csv’, mode='w', newline='')
    as f_out:
            f_reader = csv.reader(f_in, dialect=csv.excel_tab)
            f_writer = csv.writer(f_out, dialect=csv.excel_tab)
             for line in reader:
                 if line is equal then write it in writer and add a row of frequency
    Mais en recherchant sur internet je ne vois pas du tout comment écrire la dernière ligne de mon code en python

    Des idées ?

    Merci par avance

  10. #10
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 609
    Points : 2 073
    Points
    2 073
    Par défaut
    L'idée qui me vient à l'esprit, c'est d'abord d'ouvrir un tuto :
    quand on écrit if ... then ... en python, c'est qu'on a loupé quelque chose.

Discussions similaires

  1. [PEAR] Extraire des données d'un fichier CSV pour en faire un PDF
    Par kleyde89 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 12/05/2011, 10h16
  2. [Batch] Extraire des données d'un fichier CSV
    Par soufianekh dans le forum Scripts/Batch
    Réponses: 11
    Dernier message: 27/10/2009, 13h34
  3. Extraire des données d'un Fichier .csv
    Par wolverine1987 dans le forum MFC
    Réponses: 47
    Dernier message: 20/05/2009, 15h48
  4. Extraire des données d'un fichier .csv avec C++
    Par cre31400 dans le forum C++Builder
    Réponses: 14
    Dernier message: 08/07/2008, 10h25
  5. Extraire des données dans un fichier .csv
    Par orj30754 dans le forum C
    Réponses: 7
    Dernier message: 03/11/2006, 14h48

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