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 :

Associer des noms à des variables


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Par défaut Associer des noms à des variables
    Bonjour,

    J'aimerais ouvrir un série de fichiers de données que j'aimerais ensuite pouvoir traiter facilement entre eux (chaque fichier est un signal de deux colonnes: time et ampl). Pour cela j'aimerais donner aux variables de ces données un nom intuitif composé par les 2 paramètres qui les définissent: Model et Receiver
    (Model qui est le nom du repertoire où se situe le fichier, Receiver qui est le numéro du fichier)

    Je fais donc une double boucle pour aller chercher tous les fichiers que je souhaite comme 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #!usr/bin/python
    # -*- coding: utf-8 -*-
    # Python 3
    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.io import wavfile
    from scipy.fftpack import fft
    from scipy.signal import hilbert
    from scipy.signal import correlate
    from scipy import signal
     
    Model=['108','109','110']
    Receiver=['04','10']
     
    signal=[]
    time=[]
    ampl=[]
     
    for rec in Receiver:
     for mod in Model:
      path= './%s/tracex0%s' %(mod,rec)
     
      namefile1='ampl_%s_%s' %(mod,rec)
      namefile2='time_%s_%s' %(mod,rec)
     
      signal = np.loadtxt(path)
     
      namefile1=(signal[:,0])
      namefile2=(signal[:,1])
    Je n'arrive cependant pas à assigner mes valeurs aux noms de fichiers crées..

    Pourriez vous me donner des conseils sur la marche à suivre ? ou bien une direction différente pour mon problème ?

    Merci d'avance

  2. #2
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Tu crées le nom du fichier avec namefile1='ampl_%s_%s' %(mod,rec) ce qui me semble correct mais sitôt après avoir chargé le fichier original avec numpy tu modifies la référence avec namefile1=(signal[:,0]).

    Pourquoi donc ?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Par défaut
    Je sais que j'écrase tout alors que je veux simplement redéfinir...mais je ne sais pas comment m'y prendre pour faire ces deux choses:
    1/définir un nom,
    2/y associer des données.

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 253
    Par défaut
    Bonjour,

    il te faudra utiliser une structure pour associer tes fichiers à leurs données.
    Tu peux utiliser un dico avec comme clé le nom du fichier, et en données, un tableau ou liste de valeurs

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Par défaut
    Merci pour vos réponses.

    En essayant d'utiliser les dico:

    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
     
    #!usr/bin/python
    # -*- coding: utf-8 -*-
    # Python 3
    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.io import wavfile
    from scipy.fftpack import fft
    from scipy.signal import hilbert
    from scipy.signal import correlate
    from scipy import signal
     
    Model=['108','109','110']
     
    Receiver=['04','10']
     
    signal=[]
    time={}
    ampl={}
     
    for rec in Receiver:
     for mod in Model:
      path= './%s/tracex0%s' %(mod,rec)
     
      signal = np.loadtxt(path)
     
      namefile1="ampl_%s_%s" %(mod,rec)
      namefile2="time_%s_%s" %(mod,rec)
      time[namefile2]=signal[:,0]
      ampl[namefile1]=signal[:,1]
     
     
    print time
    print ampl
    plt.figure(1)
    plt.plot(time.get(time_108_04),ampl.get(ampl_108_04),'r')
    plt.grid()
    plt.show()
    mais non seulement il a pas l'air de se remplir dans l'ordre..:

    {'time_110_04': array([ 2.00000000e-04, 2.02000000e-02, 4.02000000e-02, ...,
    2.99202000e+01, 2.99402000e+01, 2.99602000e+01]), 'time_109_10': array([ 2.00000000e-04, 2.02000000e-02, 4.02000000e-02, ...,
    2.99202000e+01, 2.99402000e+01, 2.99602000e+01]), 'time_110_10': array([ 2.00000000e-04, 2.02000000e-02, 4.02000000e-02, ...,
    2.99202000e+01, 2.99402000e+01, 2.99602000e+01]), 'time_108_10': array([ 2.00000000e-04, 2.02000000e-02, 4.02000000e-02, ...,
    2.99202000e+01, 2.99402000e+01, 2.99602000e+01]), 'time_108_04': array([ 2.00000000e-04, 2.02000000e-02, 4.02000000e-02, ...,
    2.99202000e+01, 2.99402000e+01, 2.99602000e+01]), 'time_109_04': array([ 2.00000000e-04, 2.02000000e-02, 4.02000000e-02, ...,
    2.99202000e+01, 2.99402000e+01, 2.99602000e+01])}
    {'ampl_109_10': array([ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, ...,
    -3.90319086e-17, -1.59976250e-16, -1.93392070e-16]), 'ampl_109_04': array([ 0.00000000e+000, -2.82092459e-123, -1.15744342e-098, ...,
    3.69439546e-015, -2.17415131e-016, -4.18974409e-015]), 'ampl_108_04': array([ 0.00000000e+000, 2.65962119e-112, -1.38221510e-093, ...,
    -1.75350748e-011, -4.66742829e-011, -4.99248979e-011]), 'ampl_110_10': array([ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, ...,
    1.02009836e-16, -5.05187929e-18, -1.14382561e-16]), 'ampl_108_10': array([ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, ...,
    -9.61173785e-13, -1.04796836e-12, -5.19301554e-13]), 'ampl_110_04': array([ 0.00000000e+000, -3.18475864e-124, 1.53282590e-099, ...,
    6.13361052e-015, 4.67015112e-015, 4.12127359e-016])}
    mais je n'arrive pas non plus à en ploter un alors qu'il semble défini (en haut, en gras):

    plt.plot(time.get(time_108_04),ampl.get(ampl_108_04),'r')
    NameError: name 'time_108_04' is not defined
    Pas facile de trouver des exemples précis sur mon cas sur internet.. vous auriez une idée de la syntaxe ?

    Merci

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

    Citation Envoyé par Newenda Voir le message
    Pas facile de trouver des exemples précis sur mon cas sur internet.. vous auriez une idée de la syntaxe ?
    Les dictionnaires sont une structure de base du langage. La syntaxe à utiliser et les "problèmes" rencontrés se trouvent dans tous les tutos. il suffit d'ouvrir le bon chapitre.

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

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Par défaut
    Citation Envoyé par Newenda Voir le message
    En essayant d'utiliser les dico:


    mais non seulement il a pas l'air de se remplir dans l'ordre..:

    Comme tu pourras le constater dans le tutoriel proposé par wiztricks, les dictionnaires ne conserve pas l'ordre dans lequel tu les remplis.
    Si tu as besoins d'une structure ordonnées, tu peux :
    - utiliser OrderedDict
    - utiliser un autre type de structure ordonnée (tuple par exemple)

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

Discussions similaires

  1. Paramétrage des noms de variables
    Par AndréPe dans le forum Access
    Réponses: 2
    Dernier message: 07/10/2006, 15h54
  2. [Tableaux] Chaine contenant des noms de variables
    Par novices dans le forum Langage
    Réponses: 6
    Dernier message: 06/04/2006, 23h33
  3. [Stratégie] Générer des noms de variables
    Par Rekiem dans le forum Général Java
    Réponses: 31
    Dernier message: 09/01/2006, 10h23
  4. [Convention]Préfixage des noms de variables
    Par javaSudOuest dans le forum Langage
    Réponses: 5
    Dernier message: 18/11/2005, 15h52
  5. Generer des noms de variables avec une boucle
    Par moutanakid dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 28/07/2004, 17h45

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