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 :

Génération d'une matrice dans un fichier csv


Sujet :

Python

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 110
    Points : 51
    Points
    51
    Par défaut Génération d'une matrice dans un fichier csv
    Bonjour,
    j'ai implémenté un algorithme génétique et je veux maintenant afficher les résultats dans des courbes.
    j'ai simulé l'algorithme 10 runs, j'ai obtenu donc 10 fichiers textes. Chaque fichier texte contient un seul colonne : best_fitness au cours de 100 génerations
    Le contenu de fichier texte est comme ça:
    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
    0.71348
    0.62952
    0.50388
    0.50388
    0.47668
    0.36208
    0.32
    0.31428
    0.27212
    0.223
    0.223
    0.223
    0.223
    0.21432
    ....
    Maintenant, je veux concaténer ces fichiers texte dans un fichier résultat csv : le fichier résultat normalement est une matrice de 100 lignes
    (nombre de générations) et 10 colonnes (10 runs).
    j'ai essayé de faire ça en utilisant le module pandas :
    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
    import os
    import pandas as pd
     
    # Les fichiers résultats soient dans un même dossier
    # On liste tous les fichiers avec l'extension '.txt'.
    path = r'mon\dossier'
    results_files = [f for f in os.listdir(path) if f.endswith('.txt')]
     
    # On ouvre et lit les fichiers. On les transforme en tableau et on les stock
    # dans une liste avant de les concaténer en un seul et unique tableau.
    # Pour pandas un tableau est un "DataFrame", d'où le "df".
    list_df = []
    for f in results_files:
        df = pd.read_table(path + '\\' + f, index_col=None, header=0)
        # On en profite pour nommer la colonne de données
        df = df.rename(columns={'1': f})
        list_df.append(df)
    results = pd.concat(list_df)
     
    # On sauve le tableau complet sous la forme souhaitée (un csv ou même
    # un fichier excel)
    results.to_csv( path + '\\' + 'results.csv', sep='\t', index=False)
    Mais, malheureusement je n'ai pas généré la matrice voulue dans un fichier csv ; les fichiers sont concaténés dans une seule colonne.
    S'il vous plait, pouvez vous m'aider .
    Merci d'avance

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 298
    Points : 6 778
    Points
    6 778
    Par défaut
    Salut,

    Deux conseils, d'abord divise ton code en fonctions distinctes, à l'usage tu verras comme ça facilite la vie.

    Ensuite, commence par les solutions simples proposées par Python, par exemple ceci:
    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
     
    import glob
    import csv
     
    def get_files():
        return glob.glob(r'mon\dossier\*.txt')
     
    def get_values(fname):
        with open(fname, 'r') as inf:
            return inf.readlines()
     
    mat = [[] for i in range(100)]
    for file_ in get_files():
        for idx, value in enumerate(get_values(file_)):
            mat[idx].append(value.strip())
     
    with open('mat.csv', 'w', newline='\n') as csvfile:
        matwriter = csv.writer(csvfile, delimiter='\t')
        for row in mat:
            matwriter.writerow(row)
    Plus tard, si tu as vraiment la nécessité de Panda, il sera toujours temps d'apprendre à s'en servir.

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 110
    Points : 51
    Points
    51
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Salut,

    Deux conseils, d'abord divise ton code en fonctions distinctes, à l'usage tu verras comme ça facilite la vie.

    Ensuite, commence par les solutions simples proposées par Python, par exemple ceci:
    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
     
    import glob
    import csv
     
    def get_files():
        return glob.glob(r'mon\dossier\*.txt')
     
    def get_values(fname):
        with open(fname, 'r') as inf:
            return inf.readlines()
     
    mat = [[] for i in range(100)]
    for file_ in get_files():
        for idx, value in enumerate(get_values(file_)):
            mat[idx].append(value.strip())
     
    with open('mat.csv', 'w', newline='\n') as csvfile:
        matwriter = csv.writer(csvfile, delimiter='\t')
        for row in mat:
            matwriter.writerow(row)
    Plus tard, si tu as vraiment la nécessité de Panda, il sera toujours temps d'apprendre à s'en servir.
    Merci beaucoup pour votre réponse.
    Mais j'ai l'erreur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TypeError: 'newline' is an invalid keyword argument for this function
    et lorsque je supprime le champ newline, le code marche mais le résultat n'est parfaite ; on saute à chaque fois une ligne et il n'y a pas des espaces entre les valeurs . En piéce-jointe un imprime écran de quelques lignes de fichier mat.csv.
    Merci d'avance pour votre tempsNom : fichier.png
Affichages : 2069
Taille : 16,5 Ko

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 298
    Points : 6 778
    Points
    6 778
    Par défaut
    Oui, tu peux supprimer newline.

    Je l'ai testé avec 4 fichiers reprenant les dix premières valeurs de ton exemple. Les quatre fichiers sont identiques, donc.

    J'obtiens ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    0.71348	0.71348	0.71348	0.71348
    0.62952	0.62952	0.62952	0.62952
    0.50388	0.50388	0.50388	0.50388
    0.50388	0.50388	0.50388	0.50388
    0.47668	0.47668	0.47668	0.47668
    0.36208	0.36208	0.36208	0.36208
    0.32	0.32	0.32	0.32
    0.31428	0.31428	0.31428	0.31428
    0.27212	0.27212	0.27212	0.27212
    0.223	0.223	0.223	0.223
    Chaque colonne est un fichier, si j'ai bien compris ta question.

    Tu peux remplacer la tabulation par un autre caractère bien sur.

    Testé avec Python 2 et 3

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 110
    Points : 51
    Points
    51
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Oui, tu peux supprimer newline.

    Je l'ai testé avec 4 fichiers reprenant les dix premières valeurs de ton exemple. Les quatre fichiers sont identiques, donc.

    J'obtiens ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    0.71348	0.71348	0.71348	0.71348
    0.62952	0.62952	0.62952	0.62952
    0.50388	0.50388	0.50388	0.50388
    0.50388	0.50388	0.50388	0.50388
    0.47668	0.47668	0.47668	0.47668
    0.36208	0.36208	0.36208	0.36208
    0.32	0.32	0.32	0.32
    0.31428	0.31428	0.31428	0.31428
    0.27212	0.27212	0.27212	0.27212
    0.223	0.223	0.223	0.223
    Chaque colonne est un fichier, si j'ai bien compris ta question.

    Tu peux remplacer la tabulation par un autre caractère bien sur.

    Testé avec Python 2 et 3
    Oui merci, vous avez bien compris ma question.
    Merci beaucoup , mon problème est résolu.

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

Discussions similaires

  1. Ecrire une matrice dans un fichier texte
    Par tiouba dans le forum MATLAB
    Réponses: 5
    Dernier message: 20/04/2012, 15h26
  2. sauvgarder une matrice dans un fichier TXT
    Par malikakika dans le forum C++Builder
    Réponses: 2
    Dernier message: 23/03/2008, 17h45
  3. Réponses: 1
    Dernier message: 15/11/2007, 14h52
  4. décharger une table dans un fichier CSV
    Par shrek7577 dans le forum SQL
    Réponses: 3
    Dernier message: 22/12/2006, 17h44
  5. resultat d'une requete dans un fichier csv
    Par PAYASS59 dans le forum Requêtes
    Réponses: 1
    Dernier message: 21/09/2005, 22h14

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