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

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    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
    Points : 1
    Points
    1
    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 : 273
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 sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 352
    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 352
    Points : 36 879
    Points
    36 879
    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

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    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
    Points : 1
    Points
    1
    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
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    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
    Points : 1
    Points
    1
    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 sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 352
    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 352
    Points : 36 879
    Points
    36 879
    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

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    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
    Points : 1
    Points
    1
    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 : 325
Taille : 74,7 Ko

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 352
    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 352
    Points : 36 879
    Points
    36 879
    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

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    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
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup, je viens de comprendre.

    J'ai pus rectifier le tir en faisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     mon_fichier = open("graphsin.csv", "w")
    for i in range (0,1000):
        mon_fichier.write(str(data1[i]) + "\n")
    mon_fichier.close()
    mes données sont bien en forme.
    Je voudrait maintenant rajouter le temps correspondant à chaque tension pour tracer ma sinusoïde.
    Il est stocké dans une variable "t" de même type, il faudrait donc que j'arrive a le mettre dans la colonne d’accoté.

    J'ai essayé avec ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    mon_fichier = open("graphsin.csv", "w")
    for i in range (0,1000):
        mon_fichier.writes(str(t[i]) + "\n",str(data1[i]) + "\n")
    mon_fichier.close()
    mais on dirait que writes n’existe pas, je reçoit l'erreur suivante: AttributeError: 'file' object has no attribute 'writes'

    Je commence le python donc j'ai encore du mal avec tous les concept...

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 352
    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 352
    Points : 36 879
    Points
    36 879
    Par défaut
    Citation Envoyé par Ruby Smith Voir le message
    mais on dirait que writes n’existe pas, je reçoit l'erreur suivante: AttributeError: 'file' object has no attribute 'writes'

    Je commence le python donc j'ai encore du mal avec tous les concept...
    Ouvrir un tuto. ou la documentation pour avoir ce qu'on peut faire avec un fichier, regarder à quoi ressemble le fichier "csv" que vous voulez construire,...
    si vous ne prenez pas le temps de débuter... i.e prendre un peu des repères, on ne peut pas le faire à votre place.

    - W

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