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 :

Manipulation fichier CSV


Sujet :

Python

  1. #1
    Membre à l'essai
    Profil pro
    Développeur
    Inscrit en
    Mai 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2012
    Messages : 19
    Points : 17
    Points
    17
    Par défaut Manipulation fichier CSV
    Bonjour,

    je m'amuse actuellement a apprendre pour moi-même le python. J'aimerais réaliser une fonction permettant d'inverser en sortie les lignes et colonnes de mon fichier csv d'entrée.

    fichier d'entrée:
    1;2;3;4;5
    2;3;4;5;6
    3;4;5;6;7

    résultat en sortie:
    1;2;3
    2;3;4
    3;4;5
    4;5;6
    5;6;7

    Est il possible que vous m'eclairiez niveau algo, j'ai bien réussi à recuperer tous mes nombres mais je ne sais pas comment les recopier ainsi.

    Merci de votre aide.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 328
    Points : 240
    Points
    240
    Par défaut
    Salut,

    Voici une méthode :

    Tu convertis tes lignes de textes en liste grâce à la fonction maLigne.split(";") puis tu utilise par exemple la fonction ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    lignes = [(1, 2, 3, 4, 5), (2, 3, 4, 5, 6), (3, 4, 5, 6, 7)]
    print [[row[i] for row in lignes] for i in range(len(lignes[0]))]
    Et voilà,

    A +

  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,
    Pensez à utiliser zip dans ce cas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> lines = [(1, 2, 3, 4, 5), (2, 3, 4, 5, 6), (3, 4, 5, 6, 7)]
    >>> print zip(*lines)
    [(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6), (5, 6, 7)]
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre à l'essai
    Profil pro
    Développeur
    Inscrit en
    Mai 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2012
    Messages : 19
    Points : 17
    Points
    17
    Par défaut
    Merci pour votre aide,

    Ggamer, peux tu m'expliquer un peu plus ta seconde ligne stp?
    Moi j'étais parti sur l'idée de devoir utiliser des tableaux et de faire un truc du genre tableauEntrée[i][j]=tableauSortie[j][i], mais il me semble avoir vu que les tableaux de ce style n'existent pas.

    Avec votre solution, dans tous les cas, il faut que je split ma liste de liste pour pouvoir l'écrire dans mon fichier csv de sortie? pour l'instant j'arrive juste à avoir un nombre par ligne.

    Auriez vous d'autres petits exercices, ou idées, me permettant d'apprendre à manipuler les fichiers csv et leur contenu ou des dictionnaires?

  5. #5
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    La réponse de wiztricks est plus efficace, concise et fait exactement ce que vous demandez avec une simple boucle for supplémentaire, que souhaitez-vous de plus?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  6. #6
    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
    Citation Envoyé par fred1599 Voir le message
    La réponse de wiztricks est plus efficace, concise et fait exactement ce que vous demandez avec une simple boucle for supplémentaire, que souhaitez-vous de plus?
    imho, voir indices et crochets pour que le code manipule une chose qui ressemble à un tableau...
    zip(*lines) ce sera dans une autre vie.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Je ne suis pas fan des acronymes, et je sais pas trop où vous voulez en venir,mais bref une solution en partant de zip(*)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> lines = [(1, 2, 3, 4, 5), (2, 3, 4, 5, 6), (3, 4, 5, 6, 7)]
    >>> for tup in zip(*lines):
    ...     lists = map(str, tup)
    ...     print ";".join(lists)
    ... 
    1;2;3
    2;3;4
    3;4;5
    4;5;6
    5;6;7
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  8. #8
    Membre à l'essai
    Profil pro
    Développeur
    Inscrit en
    Mai 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2012
    Messages : 19
    Points : 17
    Points
    17
    Par défaut
    J'ai bien réussi et comprendre le zip(*lines) et hier soir j'ai réussi à finir mon prog.

    J'aurais juste voulu voir ce que ça donnait la solution qui ressemble à un tableau...

    Et auriez-vous des idées d'exercices du même genre?

Discussions similaires

  1. manipulation de fichier csv et txt en même temps, heelpe
    Par leila32 dans le forum Général Python
    Réponses: 3
    Dernier message: 10/04/2013, 14h04
  2. Manipulation fichier CSV
    Par Dark_fun dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 09/11/2011, 16h14
  3. Manipulation de fichier csv
    Par midgard30 dans le forum Général VBA
    Réponses: 2
    Dernier message: 12/08/2008, 06h35
  4. [CSV] Comment manipuler un fichier csv ?
    Par gorgoroth dans le forum Langage
    Réponses: 5
    Dernier message: 20/03/2008, 22h35

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