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 :

Pb d'écriture d'un CSV vers un autre pour débutant


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 150
    Par défaut Pb d'écriture d'un CSV vers un autre pour débutant
    Bonjour à tous,

    je me lance dans l'apprentissage de python et dans ce cadre j'ai un petit exercice à faire.
    Il s'agit de récupérer les données d'un fichier CSV "input", puis de les mettres dans un fichier CSV output que je dois créer dans un premier temps.

    voici mon input.CSV
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    nom,heures_travaillees
    Pierre Durand,36
    Paul Dupont,41
    Edouard Gentil,40

    Voci mon code python:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    import csv
     
    en_tete = ["nom", "salaire"]
    with open('input.csv', "r", encoding='utf-8') as input_csv, open('output.csv', "w", newline = '', encoding='utf-8') as output_csv:
        reader = csv.reader(input_csv, delimiter=',')
        writer = csv.writer(output_csv, delimiter=',')
        writer.writerow(en_tete)
     
        for ligne in input_csv:
            writer.writerow(ligne)

    puis je dois dans un second temps transformer la 2ème colonne de ce fichier output selon la formule:
    heures_travaillées * 15

    mon souci premier problème est que j'obtiens dans mon fichier output ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    nom,salaire
    n,o,m,",",h,e,u,r,e,s,_,t,r,a,v,a,i,l,l,e,e,s,"
    "
    P,i,e,r,r,e, ,D,u,r,a,n,d,",",3,6,"
    "
    P,a,u,l, ,D,u,p,o,n,t,",",4,1,"
    "
    E,d,o,u,a,r,d, ,G,e,n,t,i,l,",",4,0
    comme il peut être constaté j'ai des itérations à chaque charactère je ne sais pas comment résoudre ce premier souci.

    Mon deuxième problème est que je ne sais pas ou mettre cette formule afin de transformer les heures travaillées en salaire.
    en effet je ne comprends pas pourquoi il me retourne une erreur ou il parle de string alors que j'essai dans le code (non present ici) de transforme ce str en int mais je m'y perds alors je vous mets juste mon code initial.

    Je vous remercie par avance pour votre aide et explications pour la résolution de mon problème.
    merci beaucoup.

  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
    Citation Envoyé par K2carca Voir le message
    comme il peut être constaté j'ai des itérations à chaque charactère
    Exact. C'est parce que tu utilises writerow() prévue pour recevoir un truc "à itérer" (ie des rows (lignes)) ; et prévue pour itérer donc ce "truc à itérer" afin d'écrire correctement les lignes d'origine dans le csv de sortie.
    Or le for ligne in input_csv va récupérer la ligne du fichier input au format string. Une string étant itérable, la fonction peut l'itérer sans souci. Sauf que itérer une string revient à traiter chaque caractère individuellement

    Citation Envoyé par K2carca Voir le message
    je ne sais pas comment résoudre ce premier souci.
    Réfléchir à la pertinence du for ligne in input_csv. T'es sûr que tu veux lire la ligne d'un fichier csv au format "brut de pomme" ??? On se demande alors pourquoi tu utilises csv.reader...

    Citation Envoyé par K2carca Voir le message
    puis je dois dans un second temps transformer la 2ème colonne de ce fichier output selon la formule: heures_travaillées * 15
    Mon deuxième problème est que je ne sais pas ou mettre cette formule afin de transformer les heures travaillées en salaire.
    Entre le moment où tu lis les heures travaillées et le moment où tu écris le csv final. C'est ce qu'on nomme le "traitement des données", base de l'informatique

    Citation Envoyé par K2carca Voir le message
    en effet je ne comprends pas pourquoi il me retourne une erreur ou il parle de string alors que j'essai dans le code (non present ici) de transforme ce str en int
    C'est un peu normal, tu as lu "Pierre Durand,36" au lieu de lire "Pierre Durand", "36". Donc déjà essayer de convertir "Pierre Durand,36" en int moi humain je sais pas faire alors si tu penses que Python lui, bête machine répondant à des ordres précis, va en être capable...
    Et ça c'est encore issu du problème initial.

    Citation Envoyé par K2carca Voir le message
    mais je m'y perds
    La base, c'est afficher tes variables au moment où tu les lis pour vérifier si leur contenu réel correspond au contenu attendu.
    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
    Invité
    Invité(e)
    Par défaut
    Salut !

    Sinon il y a os.rename(src, dst)

    Plus sérieusement, c'est un peu la base de l'apprentissage de ce module, moi qui ne l'utilise jamais en 30 secondes je trouve l'info sur internet :
    https://www.analyticsvidhya.com/blog...-data-science/ (Dsl les modo, pas trouvé l'alternative sur developpez.net)

    L'essentiel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import csv
    rows = []
    with open("toto.csv", 'r') as file:
        csvreader = csv.reader(file) # read the csv file
        header = next(csvreader) # extract the header
        for row in csvreader:
            rows.append(row) # extract each rows
    print(header)
    print(rows)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    with open('copy_toto.csv', 'w', newline="") as file:
        csvwriter = csv.writer(file) # create a csvwriter object
        csvwriter.writerow(header) # write the header
        csvwriter.writerows(data) # write the rest of the data

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/12/2017, 10h32
  2. [PowerShell] Exporter des donnés d'un fichier CSV vers un autre
    Par Balrogard dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 13/12/2011, 09h19
  3. Importation CSV vers base de données
    Par Brice Yao dans le forum Bases de données
    Réponses: 1
    Dernier message: 29/06/2005, 13h42
  4. [Conseil] Import de fichier CSV vers MySQL
    Par ShinJava dans le forum JDBC
    Réponses: 6
    Dernier message: 15/03/2005, 19h14
  5. Importation de fichier CSV vers une base Interbase
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 15/03/2005, 15h18

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