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 :

Convertion d'un fichier csv


Sujet :

Python

  1. #1
    Membre éclairé
    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
    Par défaut Convertion d'un fichier csv
    Bonjour,

    Débutant, j'utilise Python dans un cadre professionnel (je ne suis pas programmeur) afin de résoudre certains problèmes.

    Alors voilà, je récupère un fichier au format CSV par extraction d'une base ORACLE. Ce fichier contient 66 colonnes et un nombre variables de lignes. Ces colonnes peuvent contenir : des nombres (entiers positifs ou réels positifs), des dates, des heures, du texte, du texte avec retour à la ligne. Or dans mon fichier csv tout est au format texte et je souhaite créer un fichier Excel pour pouvoir traiter mes données.

    J'ai trouvé sur ce forum des pistes http://www.developpez.net/forums/d99...ersion-nombre/ pour traiter ce genre de problème mais uniquement pour transformer l'intégralité d'un fichier de texte à nombre, pas pour traiter au sein d'un même fichier différents types de données.

    Je joins à ma demande un extrait du fichier.

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

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 699
    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 699
    Par défaut
    Salut,
    Pourquoi ne pas importer le fichier directement depuis Excel?
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre éclairé
    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
    Par défaut
    Parce que les formats ne sont pas respectés : les nombres, les dates et heures sont au format TEXT.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 699
    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 699
    Par défaut
    Certes, si vous ouvrez le fichier .CSV l'outil d'import d'EXCEL vous permet de préciser le type des différentes colonnes.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 159
    Par défaut
    Salut,
    Si tu veux le faire en python, ben faut s'y coller.
    Par exemple :

    Tu utilises le module csv, avec pourquoi pas un DictWriter qui te donnes un itérateur sur une série de dictionnaires. Chaque dictionnaire correspond à une ligne de ton fichier, les clés sont les noms des champs et les valeurs la valeur du champ dans la ligne en question).
    Tu fais une table de correspondance entre chaque clé et la conversion que tu souhaites appliquer à ce champ (pourquoi pas un dictionnaire de fonctions ?).
    Tu réfléchis à la manière d'intercepter les erreurs de conversion (erreur, avertissement, on laisse en texte ?).

    Puis tu boucles sur ton DictWriter, fais les conversions et stocke le résultat dans une liste.

    Pour l'écriture dans excel je suppose qu'il existe un module, mais je ne connais pas.

    [edit] évidemment, si on peut éviter de construire une moulinette en suivant le conseil de wiztricks, ne pas s'en priver... là encore je ne connais pas excel

  6. #6
    Membre éclairé
    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
    Par défaut
    en lisant valAa c'est pas gagné, je vais tester la méthode de wiztricks

    merci

  7. #7
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    J'ai eu il y a peu un problème de ce genre à résoudre (échange entre une base sqlite3 et Excel 2003), et j'ai découvert que Excel cherchait à "deviner" le type de données à intégrer par csv, et y arrivait la plupart du temps.

    Ainsi, une données chaine "999" est reconnue comme un entier. On le voit bien parce qu'elle est cadrée à droite de sa colonne alors que les chaines sont cadrées à gauche. De même que les nombres flottants à condition, pour le Excel français, qu'ils aient déjà la virgule décimale et pas le point. De même pour les dates ou les heures. On peut vérifier le format reconnu sous Excel en interrogeant "format => cellule".

    Bref, il faut essayer! C'est ce que je viens de faire avec le fichier F_TEST.csv, et ça a l'air de marcher plutôt bien.

    Il y a des cas ou cette capacité 'divinatoire' est génante. Par exemple, un code postal, même passé sous forme de chaine, arrive dans Excel comme un entier. Un nombre flottant avec un point décimal arrive comme une chaine dans un Excel français (pas de correction avec la locale). Avec openoffice, ce n'est pas mieux: c'est décodé comme une date... Afin de résoudre mes problèmes de flottants, j'ai développé des corrections (http://python.jpvweb.com/mesrecettes...s_csv_tableurs), mais tu ne devrais pas en avoir besoin.

    Donc, avec ta version d'Excel, tu vérifies avec un fichier test contenant tous tes types de données, qu'elles sont bien reconnues par Excel dans leurs bon format. Et il y a de forte chance que ça marche tout seul.

    Tyrtamos

Discussions similaires

  1. [VB6] Convertion d'un fichier bmp en jpg
    Par WOLO Laurent dans le forum VB 6 et antérieur
    Réponses: 22
    Dernier message: 12/01/2015, 13h22
  2. [Débutant] convertion fichier .csv en 1/ octave sous matlab
    Par LabKim dans le forum MATLAB
    Réponses: 0
    Dernier message: 09/07/2014, 09h12
  3. Convertion de fichier csv de DOS en UNIX
    Par tamise dans le forum Shell et commandes POSIX
    Réponses: 1
    Dernier message: 30/05/2014, 21h53
  4. Mise à jour d'une table avec un fichier csv
    Par blackangel dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 26/05/2005, 14h46
  5. Réponses: 2
    Dernier message: 14/05/2004, 12h55

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