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 :

Modification d'un fichier csv


Sujet :

Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Points : 40
    Points
    40
    Par défaut Modification d'un fichier csv
    Bonjour,

    je dispose d'un fichier CVS dont j'aimerai modifier une colonne, cette colonne contient des numéros précédés d'une chaine de caractère : "num".
    J'aimerai modifier ce fichier de façon a éffacer "num" et a ne garder que le nombre qui suit.

    Je n'ai jamais modifier de fichier via Python, mon script semble un peu fouilli...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    import csv             # j'importe le module csv
     
    fichier = open('test.csv','rb')          #j'ouvre mon fichier
    fichiercsv = csv.reader(fichier, delimiter=' ')          #je le lis
     
    for ligne in fichiercsv:                          # enfin je boucle et je remplace les "num" par rien
     
         csv.replace("num", "")
     
    fichier.close()                      #je ferme le fichier

    Biensur ce code ne fonctionne pas, plus étonnant j'obtiens une erreur dès la 1ere ligne,
    "import : commande introubable".

    Merci à vous

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Dans la boucle 'for', ligne est la liste des champs de l'enregistrement. Le remplacement ne peut se faire que sur l'un des champs. Par exemple, si c'est le 3e champ (=indice 2):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for ligne in fichiercsv:
        ligne[2]=ligne[2].replace("num", "")
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Points : 40
    Points
    40
    Par défaut
    Bonjour,

    merci pour votre réponse,

    j'ai modifié mon code comme vous me l'avez suggéré, cependant j'aimerai appliqué cette modification à l'ensemble des lignes de mon fichier, j'avais donc pensé a ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for ligne in fichiercsv:
     
    	ligne = ligne.replace("num","")
    mais j'obtiens le message d'erreur suivant ;


    AttributeError: 'list' object has no attribute 'replace'

    Je dois reconnaître que je ne comprends pas tout, cela signifie que je ne peux pas appliquer la fonction replace sur mon indice ligne ?

  4. #4
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    - replace est une méthode qui s'applique à une chaine de caractères

    - ligne est ici une liste de chaines et non une chaine: ligne.replace génère donc une erreur!

    - ligne[2], par contre est une chaine: c'est le 3e élément de la liste "ligne".

    Pour appliquer le remplacement à toutes les lignes et retrouver le résultat après la boucle, il faut récupérer le résultat de chaque ligne dans une nouvelle liste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    listecsv = []
    for ligne in fichiercsv:
        ligne[2]=ligne[2].replace("num", "")
        listecsv.append(ligne)
    # ici, listecsv contient toutes les lignes après application du remplacement
    Ce serait bien de passer un peu de temps avec le cours de Gérard Swinnen: http://python.developpez.com/cours/TutoSwinnen/ .
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Points : 40
    Points
    40
    Par défaut
    Merci pour votre réponse je comprends mieux, je vais étudier attentivement ce tutoriel.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Points : 40
    Points
    40
    Par défaut
    J'aurais juste une dernière question

    Lorsque je test ce code j'ai le message d'erreur suivant ;


    IndexError: list index out of range
    j'ai déjà vu ce message d'erreur lorsque je tentais de faire rentrer X données dans un tableau avant seulement X-1 places, mais ici ce n'est pas le cas, je n'ai pas de taille pré défini :/

  7. #7
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Cela signifie probablement que le CSV n’a qu’une ou deux colonnes…

    La ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ligne[2]=ligne[2].replace("num", "")
    … implique que chaque ligne du CSV est formée d’au moins trois colonnes, puisqu’elle travaille sur la troisième colonne. Il faut adapter l’indice (le 2) à la colonne à laquelle se trouvent les données à traiter.

  8. #8
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    Une fois le remplacement en mémoire effectué, vous devez faire la sauvegarde sur disque.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    out = open("genes_edit.csv", "wb")
    outw = csv.writer(out)
    outw.writerows(listecsv)
    out.close()
    Tête en l'air...
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Points : 40
    Points
    40
    Par défaut
    Merci pour vos réponses,

    j'avais en effet un soucis d'indice (merci mont29), par contre pour la sauvegarde sur le disque je suis un peu perdu, j'ai testé le code suivant :

    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
     
    import csv
     
    fichier = open('test.csv','rb')
    fichiercsv = csv.reader(fichier, delimiter=',')
    out = open("test_edit.csv", "wb")
    outw = csv.writer(out)
    outw.writelines(listecsv)
    listecsv = []
    for ligne in fichiercsv:
     
    	ligne[0] = ligne[0].replace("chr","tot")
    	listecsv.append(ligne)
     
     
     
    out.close()   
    fichier.close()
    mais j'obtiens le message d'erreur suivant en console :

    File "script.py", line 7, in <module>
    outw.writelines(listecsv)
    AttributeError: '_csv.writer' object has no attribute 'writelines'

  10. #10
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    Citation Envoyé par tom77380 Voir le message
    mais j'obtiens le message d'erreur suivant en console :
    Désolé, j ai commis une légère dans le premier post(avant -edit).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import csv
     
    fichier = open('test.csv','rb')
    fichiercsv = csv.reader(fichier, delimiter=',')
    out = open("test_edit.csv", "wb")
    outw = csv.writer(out)
    listecsv = []
    for ligne in fichiercsv:
     
    	ligne[0] = ligne[0].replace("chr","tot")
    	listecsv.append(ligne)
    outw.writerows(listecsv)   #La sauvegarde se fait apres modification. :mrgreen: 
    out.close()   
    fichier.close()
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Points : 40
    Points
    40
    Par défaut
    ça fonctionne merci beaucoup

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

Discussions similaires

  1. Modification dans un fichier csv en php
    Par louise70 dans le forum Langage
    Réponses: 1
    Dernier message: 13/02/2015, 12h06
  2. Modifications sur un fichier CSV en Input (PDI)
    Par Nesrine_SM dans le forum kettle/PDI
    Réponses: 0
    Dernier message: 30/08/2012, 11h45
  3. Modification d'un fichier CSV
    Par Tobear91 dans le forum Langage
    Réponses: 2
    Dernier message: 12/02/2011, 18h32
  4. Modification d'un fichier csv ?
    Par dauphin34000 dans le forum Langage
    Réponses: 2
    Dernier message: 15/08/2008, 14h07
  5. fichier CSV modification des données.
    Par suya95 dans le forum Excel
    Réponses: 8
    Dernier message: 26/07/2006, 12h22

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