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

Calcul scientifique Python Discussion :

Mettre le contenu d'un tableau dans un fichier csv


Sujet :

Calcul scientifique Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2019
    Messages : 5
    Par défaut Mettre le contenu d'un tableau dans un fichier csv
    Bonjour,

    Je suis actuellement sur un projet ou je dois récupérer un signal issu d'un GBF (Sinus 1OOHz, 2Vpp) avec une carte National Instruments NI USB-6366

    J'utilise pour cela le package python fluidlab: https://fluidlab.readthedocs.io/en/latest/index.html qui le permet en une seule commande de faire une acquisition et de mettre les données dans une variable comme suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data1, = read_analog('dev1/ai0', terminal_config='Diff',volt_min=-10, volt_max=10, samples_per_chan=N,sample_rate=sampling, coupling_types='DC')
    (notez que N=10000 et sampling=10e3)

    Je me retrouve donc avec une variable data1 de type float64 de taille (10000,) qui contient toutes mes données dans une tableau (avec l'explorateur de variables de mon IDE Spyder je vois une extrait des données array([ 0.48068259, 0.42349704, 0.36537403, ..., 0.62786508, 0.57817927, 0.52505608])

    Ma variable est tout a fait fonctionnelle, je peut l'afficher dans la console avec matplotlib et numpy:
    Nom : Capture.PNG
Affichages : 318
Taille : 78,5 Ko

    Mon problème est donc de mettre le contenu ce cette variable dans un fichier csv pour pouvoir importer et traiter les données sous d'autres logiciels comme Matlab.
    J'ai essayé avec ce code la:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    with open ("grafsin.csv","wb") as f:
        writer = csv.writer(f)
        writer.writerows(data1)
    mais ça ne marche pas, la console me sort Error: sequence expected au niveau de la ligne: writer.writerows(data1)

    Merci d'avance pour votre aide

    Ruby Smith.

    PS: je met mon code entier si besoin

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    # -*- coding: utf-8 -*-
    """
    Created on Wed Apr 24 16:32:19 2019
     
    @author: RG259588
    """
     
    from fluidlab.instruments.daq.daqmx import read_analog
     
    import numpy as np
    import matplotlib.pyplot as plt
    import csv
     
     
    N=10000 #Sampless
    sampling=10e3 #Sample rate
    #data1,data2, = read_analog(('dev1/ai0','dev1/ai1'), terminal_config='Diff',volt_min=-10, volt_max=10, samples_per_chan=N,sample_rate=sampling, coupling_types='DC', output_filename =None)
    data1, = read_analog('dev1/ai0', terminal_config='Diff',volt_min=-10, volt_max=10, samples_per_chan=N,sample_rate=sampling, coupling_types='DC')
    plt.figure()
    plt.clf()
    t=np.arange(N)/sampling
    plt.plot(t,data1)
    #plt.plot(t,data2)
    plt.show()
     
    #map(int,list(str(data1))
    #
    ##mon_fichier = open("graphsin.txt", "w")
    ##mon_fichier.write(data1)
    ##mon_fichier.close()
    #
    #
    with open ("grafsin.csv","wb") as f:
        writer = csv.writer(f)
        writer.writerows(data1)

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 778
    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 778
    Par défaut
    Salut,

    Un fichier CSV est une structure à deux dimensions (des lignes et des colonnes) et c'est ce qu'attend .writerows.
    Or votre tableau n'a qu'une seule dimension... .writerow devrait fonctionner.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2019
    Messages : 5
    Par défaut
    Bonjour, merci pour votre réponse rapide,

    Je ne comprend pas trop du coup, mon variable possède & colonne et 10000 lignes, j'ai donc bien un tableau a deux dimensions ?
    Sinon existe t'il une commande pour que je puisse remplir ma colonne ?

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2019
    Messages : 5
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Un fichier CSV est une structure à deux dimensions (des lignes et des colonnes) et c'est ce qu'attend .writerows.
    Or votre tableau n'a qu'une seule dimension... .writerow devrait fonctionner.

    - W
    Ah, je viens de comprendre c'est une histoire de pluriel.
    Je viens de tester ça marche a moitié, Python m'a tous mis sur la case A1 sur excel, comment pourai-je faire pour avoir chaque chiffre dans une nouvelle ligne (A1, A2, A3...ect) ?

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 778
    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 778
    Par défaut
    Citation Envoyé par Ruby Smith Voir le message
    Je viens de tester ça marche a moitié, Python m'a tous mis sur la case A1 sur excel, comment pourai-je faire pour avoir chaque chiffre dans une nouvelle ligne (A1, A2, A3...ect) ?
    Python n'écrit que le fichier CSV pas la case A1 d'EXCEL!

    Après si vous voulez avoir N lignes à la place de N colonnes, vous pouvez faire une boucle, transposer votre tableau,...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2019
    Messages : 5
    Par défaut
    Merci pour votre aide,

    J'ai pu adapter mon code comme suit:

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    # -*- coding: utf-8 -*-
    """
    Created on Wed Apr 24 16:32:19 2019
     
    @author: RG259588
    """
     
    from fluidlab.instruments.daq.daqmx import read_analog
     
    import numpy as np
    import matplotlib.pyplot as plt
    import csv
     
     
    N=1000 #Sampless
    sampling=10e3 #Sample rate
     
    #data1,data2, = read_analog(('dev1/ai0','dev1/ai1'), terminal_config='Diff',volt_min=-10, volt_max=10, samples_per_chan=N,sample_rate=sampling, coupling_types='DC', output_filename =None)
    data1, = read_analog('dev1/ai0', terminal_config='Diff',volt_min=-10, volt_max=10, samples_per_chan=N,sample_rate=sampling, coupling_types='DC')
     
    plt.figure()
    plt.clf()
    t=np.arange(N)/sampling
    plt.plot(t,data1)
    #plt.plot(t,data2)
    plt.show()
     
     
    with open ("grafsin.csv","w") as f:
        writer = csv.writer(f)
        for i in range (0,1000):
            writer.writerow("'"+str(data1[i])) # le ' pour qu'excel n'interprète pas la donnée comme une formule
    Les donnés se mettent dans dans le tableau mais sous un format étrange:
    ',-,0,.,6,4,7,0,9,1,1,7,4,0,4,7 alors que je devrai avoir idéalement ça: '-0.647091174047
    Avez vous une idée de l'origine du problème ?
    Il y a également un second petit problème: chaque chiffre est espacé par une case vide...

    Nom : Capture.PNG
Affichages : 363
Taille : 74,7 Ko

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 778
    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 778
    Par défaut
    Salut,

    Citation Envoyé par Ruby Smith Voir le message
    Les donnés se mettent dans dans le tableau mais sous un format étrange:
    ',-,0,.,6,4,7,0,9,1,1,7,4,0,4,7 alors que je devrai avoir idéalement ça: '-0.647091174047
    Avez vous une idée de l'origine du problème ?
    .writerow, comme son nom l'indique écrit une ligne de votre fichier CSV, çàd N colonnes séparées par ',' (par défaut)... donc il va découper la séquence que vous lui passer pour en faire des colonnes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> import csv
    >>> import sys
    >>> writer = csv.writer(sys.stdout)
    >>> writer.writerow('abc')
    a,b,c
    7
    >>>
    Et lorsque le nombre de colonnes se réduit à 1, on ne peut pas faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> writer.writerow(123.456)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    _csv.Error: sequence expected
    >>>
    ou bricoler en essayant de s'en sortir avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> writer.writerow(str(123.456))
    1,2,3,.,4,5,6
    15
    >>>
    Citation Envoyé par Ruby Smith Voir le message
    Il y a également un second petit problème: chaque chiffre est espacé par une case vide...
    Ah ben, avant d'utiliser le module CSV, il faut ouvrir le mode d'emploi et le lire...

    Ceci dit, pour créer un fichier à partir d'un tableau à une seule dimension avec une seule valeur par ligne, pas la peine d'utiliser le module CSV.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [Débutant] mettre le contenu de ma cell dans un fichier texte
    Par membreComplexe12 dans le forum MATLAB
    Réponses: 9
    Dernier message: 07/01/2012, 13h18
  2. Enregistrer le contenu d'un tableau dans un fichier
    Par solicel dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 16/11/2009, 16h50
  3. mettre le contenu d'une liste dans un fichier EXCEL
    Par john_wili dans le forum Jasper
    Réponses: 1
    Dernier message: 13/01/2009, 11h22
  4. Réponses: 8
    Dernier message: 13/04/2007, 11h17
  5. Mettre les valeurs d'un tableau dans un fichier
    Par ero-sennin dans le forum C++
    Réponses: 4
    Dernier message: 14/03/2006, 13h47

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