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 :

créer fichier csv a partir d'une list [1,2,5,6,8]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2016
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 29
    Par défaut créer fichier csv a partir d'une list [1,2,5,6,8]
    Bonjour,

    J'essaye de créer un fichier csv à partir d'une liste connue ((inc) dans mon fichier.
    J'ai une erreur renvoyée dans ma fonction... lignes 104...

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    #import des librairies
    import serial
    import numpy as np
    from matplotlib import pyplot as plt
    import time
    import struct
    import csv
     
     
    ser = serial.Serial('com7', 115200) #ouverture du port série. Il faut appareiller au pc le boitier et vérifier le numéro du port
    duree=2
     
    AGyY=0 #Angle Gyroscope axe Y
    AFcY=0 #Angle Filtre Complémentaire axe Y
    delta_t=0 #pas de temps entre deux mesures (lecture sur le port série environ 0,04s) 
    TabFiltreComp = [0] * 5000 #déclaration des tableaux de données
    TabGyY=[0] * 5000 #tableau angle gyroscope axe Y
    TabAcY=[0] * 5000 #tableau angle accéléromètre axe Y
    TabAk=[0] * 5000 #tableau angle calculé Kalman
    inc= [0] * 5000 #tableau incréments
    i=0 #incrément temps de mesure
    u=0
     
    fig, ax = plt.subplots() #création du graphe
    fig.canvas.draw()
     
    #fonction lecture : renvoi l'accélération en mg (axes X et Z) et la vitesse en °/s (axe Y)
    def lecture():
        ser.write(b'e') #demande reception message 'a,b,c,d,e' selon le protocole
        data = ser.read(10) #affectation à data du message renvoyé
        if len(data)==10: #on vérifie que le nombre d'octet correspond à la demande (voir protocole)
        #concaténation des octets
            Ax=(float(list(bytearray(data))[1]<<8)+float(list(bytearray(data))[0])) #accélération sur x
            Az=(float(list(bytearray(data))[3]<<8)+float(list(bytearray(data))[2])) #accélération sur z
            Gy=(float(list(bytearray(data))[5]<<8)+float(list(bytearray(data))[4])) #vitesse autour de y
            if Ax>32768: #test pour trouver le signe de l'accélération sur X
                Ax=(65520-Ax)/16
            else :
                Ax=(-Ax/16)
            if Az>32768: #test pour trouver le signe de l'accélération sur Z
                Az=(65520-Az)/16
            else :
                Az=(-Az/16)
            if Gy>32768: #test pour trouver le signe de la vitesse autour de Y
                Gy=(65535-Gy)*0.0175
            else :
                Gy=(-Gy*0.0175)
            Ak=-struct.unpack(">f", data[-4:])[0] #récupère les 4 derniers octets et conversion en decimal protocole IEEE; angle Kalman
        return (Ax,Az,Gy,Ak)
     
    #fonction gyro: calcul de l'angle (axeY) issu de la mesure du gyroscope
    def gyro(GyY,AGyY,delta_t):
        AGyY=((AGyY+float(GyY)*delta_t)) #intégration de la vitesse
        return (AGyY)
     
    #fonction accel: calcul l'angle issu de le mesure de l'accéléromètre    
    def accel(AcX,AcZ):
        AAcY=np.arctan(float(AcX)/float(AcZ))*180/np.pi #calcul de projection
        return (AAcY)
     
    #fonction filtre_comp: calcul de l'angle filtré à partir des mesures de l'accéléromètre et du gyroscope    
    def filtre_comp(AcX,AcZ,GyY,AFcY,delta_t):
        AFcY=0.3*(AFcY+float(GyY)*delta_t) + 0.7*np.arctan(float(AcX)/float(AcZ))*180/np.pi
        return (AFcY)
     
    print("début d'acquisition") 
    t=time.time()
    while (i<duree):
        try:
            AcX,AcZ,GyY,Ak=lecture()
            delta_t=(time.time()-t)
            t=time.time()	# Releve le temps juste après le calcul du delta_t
            print(delta_t) #affichage possible des données dans la console...
            #print(AcX,AcZ,GyY)
            AGyY=gyro(GyY,AGyY,delta_t)
            AAcY=accel(AcX,AcZ)
            AFcY=filtre_comp(AcX,AcZ,GyY,AFcY,delta_t)
            TabGyY.append(AGyY) #on complète au fur et à mesure les données dans les tableaux
            TabAcY.append(AAcY)
            TabFiltreComp.append(AFcY)
            TabAk.append(Ak)
            inc.append(i)
            i=i+delta_t #incrément
     
     
        except:
            print("Oups!! problème...")
     
     
     
    trace_filtre,=plt.plot(inc,TabFiltreComp, label="Filtre complémentaire") #affichage des tracés avec légendes
    trace_gyr,=plt.plot(inc,TabGyY, label="Gyroscope")
    trace_accel,=plt.plot(inc,TabAcY, label="Accéléromètre")
    #trace_kalman,=plt.plot(inc,TabAk, label="Filtre de Kalman")
    plt.legend(handles=[trace_filtre,trace_gyr,trace_accel], loc=4)
    plt.show()
     
    ser.close() #fermeture du port série
    print("port série fermé :",ser.port)
     
    print(inc)
     
     
    with open('MONFICHIER.csv', 'w') as csv:
        writer = csv.writer(inc, delimiter=",")
        writer.writerows(inc)
     
    csv.close()
    Merci d'avance pour votre aide!

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

    Il n'est pas interdit d'écrire with open('MONFICHIER.csv', 'w') as csv: mais pour l'instruction suivante writer = csv.writer(inc, delimiter=","), vous avez écrasé la définition précédente de "csv" (le module csv suite à import) et comme un file n'a pas de méthode .writer, çà râle.
    De plus csv.writer attend, comme premier argument, un file et non une liste.
    Mais çà n'a pas eu le temps d'arriver jusque là.

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

  3. #3
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2016
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 29
    Par défaut
    Merci pour la réponse,

    j'ai donc modifié mes dernières lignes ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    open('MONFICHIER.csv', 'w')
    writer = csv.writer(inc, delimiter=",")
    csv.writer.writerows("\n".join(inc))
    Mais je n'arrive toujours pas à comprendre le problème du premier argument non accepté?

    Merci encore pour votre aide

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par tournette Voir le message
    Mais je n'arrive toujours pas à comprendre le problème du premier argument non accepté?
    comprendre? Si vous utilisez une fonction comme csv.writer, vous devez lui passez les arguments qu'elle attend pour espérer qu'elle fonctionne et vous retourne l'objet attendu. Les arguments attendus par cette fonction sont documentés, il suffit d'appliquer...

    Mais en remplaçant la séquence d'instructions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    with open('MONFICHIER.csv', 'w') as csv:
        writer = csv.writer(inc, delimiter=",")
        writer.writerows(inc)
    par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    open('MONFICHIER.csv', 'w')
    writer = csv.writer(inc, delimiter=",")
    csv.writer.writerows("\n".join(inc))
    vous semblez ignorer la relation qu'il peut y avoir entre les différentes instructions: récupérer un file, en faire un writer, écrire une liste de lignes,... Et çà pour le comprendre, je ne peux que vous conseiller d'ouvrir un tuto. car vous allez vite vous épuiser à essayez n'importe quoi sans trop comprendre.

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

Discussions similaires

  1. [XL-2003] Créer un planning Gantt à partir d'une liste de taches
    Par babouu dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/07/2012, 08h32
  2. creer un fichier .csv a partir d'une chaine de caractère
    Par JAMINF dans le forum Général Java
    Réponses: 3
    Dernier message: 31/10/2008, 19h21
  3. créer des array numéroté à partir d'une liste
    Par tavarlindar dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/05/2008, 18h50
  4. Réponses: 19
    Dernier message: 27/11/2007, 23h54
  5. Créer un nouvel onglet à partir d'une liste déroulante
    Par valouche dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 02/06/2007, 11h26

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