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 :

Mise en forme fichier CSV


Sujet :

Python

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 237
    Points : 99
    Points
    99
    Par défaut Mise en forme fichier CSV
    Bonjour à tous,

    Je suis un débutant en Python, non programmeur de formation et je souhaite automatiser le traitement de fichiers CSV dans le cadre de mon travail. En effet je vais recevoir une grande quantité de fichiers du type input.csv dont le contenu devra être mis sous la forme output.csv avant d'être transféré dans une base de données.

    Merci de votre aide.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 237
    Points : 99
    Points
    99
    Par défaut
    j'ai avancé dans l'écriture du code, mais j'ai un message d'erreur que je n'arrive pas à expliquer.

    Voici le code :
    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
    19
    20
    21
    #!/usr/bin/env python
    # -*- coding: iso-8859-1 -*-
     
     
    fs = open('43-46-9p90N_0-40-59p02S_INV_1_1_100921_074244.csv', 'r')
    fd = open('output.csv', 'w')
     
     
    while 1:
        txt = fs.readline()
        print txt
        if txt =="":
            break
        if txt[0]=='S':
            data1 = txt[0:13]           # récupération de la chaîne SNINV;038539;
        if txt[0]=='T':
            data2 = txt[0:48]           # récupération de la chaîne TypeINV;43°46'9.90''N_0°40'59.02''S_INV_DFNN.ini;
        fd.write(data1+data2+txt)
     
    fs.close()
    fd.close()
    et j'ai le message d'erreur suivant sur la ligne : fd.write(data1+data2+txt)
    NameError: name'data2' is not difined
    Merci pour le coup de main

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,
    Compte tenu de la structure de votre fichier d'entrée, l'initialisation de data1/2 demande la lecture de plusieurs lignes avant de pouvoir écrire.
    J'écrirai plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    for line in fs.readline():
        if line[0] == 'S':
                data1 = line[0:13]     
                state = 1
        elif state is 1 and line[0] == 'T':
                data2 = line[0:48] 
                state += 1
        elif state is 2:
                fd.write(data1+data2+txt)
        else: raise Exception("am i supposed to get here?")
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 237
    Points : 99
    Points
    99
    Par défaut
    Merci pour ta réponse W, je n'ai plus l'erreur initiale par contre le fichier retourné est vide

    Voici le code :

    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
    19
    20
    21
    22
    #!/usr/bin/env python
    # -*- coding: iso-8859-1 -*-
     
     
    fs = open('43-46-9p90N_0-40-59p02S_INV_1_1_100921_074244.csv', 'r')
    fd = open('output.csv', 'w')
     
    print fs
     
    for line in fs.readline ():
        if line[0]=='S':
            data1 = line[0:13]           # récupération de la chaîne SNINV;038539;
            state = 1
        elif state is 1 and line[0]=='T':
            data2 = line[0:48]           # récupération de la chaîne TypeINV;43°46'9.90''N_0°40'59.02''S_INV_DFNN.ini;
            state +=1
        elif state is 2:
            fd.write(data1+data2+line)
        else : raise Exception('am i supposed to get here?')
     
    fs.close()
    fd.close()

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,
    C'est parce que cut&paste!
    remplacez fs.readline par fs.readlines
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 237
    Points : 99
    Points
    99
    Par défaut
    Oui effectivement, c'est exactement le résultat souhaité

    Merci pour ton aide wiztricks



    Voici le code final :

    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
    19
    20
    21
    22
    #!/usr/bin/env python
    # -*- coding: iso-8859-1 -*-
     
     
    fs = open('43-46-9p90N_0-40-59p02S_INV_1_1_100921_074244.csv', 'r')
    fd = open('output.csv', 'w')
     
    print fs
     
    for line in fs.readlines ():
        if line[0]=='S':
            data1 = line[0:13]           # récupération de la chaîne SNINV;038539;
            state = 1
        elif state is 1 and line[0]=='T':
            data2 = line[0:49]           # récupération de la chaîne TypeINV;43°46'9.90''N_0°40'59.02''S_INV_DFNN.ini;
            state +=1
        elif state is 2:
            fd.write(data1+data2+line)
        else : raise Exception('am i supposed to get here?')
     
    fs.close()
    fd.close()
    Bonne soirée

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

Discussions similaires

  1. Problème de mise en forme fichier csv dans xls
    Par hugues03 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 08/03/2013, 14h29
  2. Réponses: 1
    Dernier message: 16/03/2007, 10h30
  3. [VBA] Problème enregistrement mise en forme fichier word
    Par guenfood dans le forum VBA Word
    Réponses: 1
    Dernier message: 07/06/2006, 14h10
  4. Mise en forme fichier xls à partir d'access
    Par Bigdeal dans le forum VBA Access
    Réponses: 2
    Dernier message: 27/09/2005, 15h47
  5. Mise en forme fichier avant Import
    Par jeff37 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/04/2004, 15h16

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