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 :

listes de variables [Python 3.X]


Sujet :

Python

  1. #1
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut listes de variables
    Bonsoir et bonne année à tout le monde !
    Je souhaiterais créer une liste de variables dont le contenu est extrait d'un fichier .csv.
    Pour l'instant, ce que je fais, c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    temps = []
    temp=[list() for i in range(8)]
    for i in range(8):
        temp[i] = []
    J'ai donc une liste de listes que je remplis ensuite avec append.
    Je ne sais pas si c'est facilement possible, je préférerais avoir des variables du type, temp0, temp1, temp2, ...
    Si vous avez une idée, je prends.
    Pas d'aide par mp.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Ce n'est pas parce qu'on peut écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for x in range(8):
         globals()['temp%d' % x] = []
    que c'est une bonne idée.

    Ecrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    temp = { x: [] for x in range(8) }
    fait la même chose dans un dictionnaire spécifique.

    Il sera plus facile à utiliser car connaissant l'entier "n" on accède à la liste via un simple temp[n] plutôt que d'avoir à construire un nom de variable pour y accéder dans globals().

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

  3. #3
    Expert éminent

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

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

    J'ai commenté ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    temps = []      # Pas utile en Python
    temp=[list() for i in range(8)] # [i for i in range(8)] !  La liste est créée, donc les deux lignes qui suivent sont inutiles
    for i in range(8):
        temp[i] = []    # Python 2 > temp = range(8)
                        # Python3 > list(range(8))

  4. #4
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Merci à tous les 2.

    wiztricks : effectivement, passer par globals() risque de me compliquer la tache ensuite lorsque je ferai cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for k in range(8):
        plt.plot(temps,temp[k],label=legende[k+1])
    VinsS : effectivement, je me suis un peu embrouillé.
    Par contre, cela ne fonctionne pas du tout, cela, ou c'est moi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    temp=[i for i in range(8)]
    Pas d'aide par mp.

  5. #5
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Pourtant:
    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
     
    Python 3.2.3 (default, Jun 18 2015, 21:46:42) 
    [GCC 4.6.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> l = [i for i in range(8)]
    >>> l
    [0, 1, 2, 3, 4, 5, 6, 7]
    >>> 
     
    Python 2.7.3 (default, Jun 22 2015, 19:43:34) 
    [GCC 4.6.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> l = [i for i in range(8)]
    >>> l
    [0, 1, 2, 3, 4, 5, 6, 7]
    >>>
    Quoiqu'il en soit, ce n'est pas utile.

    Python 2
    Python 3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    temp = list(range(8))

  6. #6
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Merci, cependant, cela correspond mieux à mon cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    temp=[list() for i in range(8)]
    Pas d'aide par mp.

  7. #7
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    ben ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    >>> l = [list() for i in range(8)]
    >>> l
    [[], [], [], [], [], [], [], []]
    >>> l = [[]] *8
    >>> l
    [[], [], [], [], [], [], [], []]
    >>>

  8. #8
    Membre éprouvé
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Points : 926
    Points
    926
    Par défaut
    Citation Envoyé par VinsS Voir le message
    ben ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    >>> l = [list() for i in range(8)]
    >>> l
    [[], [], [], [], [], [], [], []]
    >>> l = [[]] *8
    >>> l
    [[], [], [], [], [], [], [], []]
    >>>
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> l = [[]] *8
    >>> l[0].append(1)
    >>> l
    [[1], [1], [1], [1], [1], [1], [1], [1]]
    >>> l = [list() for i in range(8)]
    >>> l[0].append(1)
    >>> l
    [[1], [], [], [], [], [], [], []]
    >>>
    Non?
    Clodion

  9. #9
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Merci Clodion.
    C'est effectivement ce que je me disais : ma solution est donc la bonne, non ?
    Pas d'aide par mp.

  10. #10
    Membre éprouvé
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Points : 926
    Points
    926
    Par défaut
    Citation Envoyé par marco056 Voir le message
    C'est effectivement ce que je me disais : ma solution est donc la bonne, non ?
    Bonsoir,
    Oui, pour créer une liste vide.
    Je préfère:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> l = [[] for i in range(8)]
    >>> l[5].append("*")
    >>> l
    [[], [], [], [], [], ['*'], [], []]
    >>>
    car c'est plus court

    Sinon, les remarques de wiztricks sont à prendre en compte si besoin; de même que les commentaires de VinsS qui sont pertinents!

    Clodion

  11. #11
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Merci, j'ai bien tout noté...
    Pas d'aide par mp.

  12. #12
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 813
    Points : 7 102
    Points
    7 102
    Par défaut
    L'énoncé manque de précision pour donner une solution adaptée au problème...

    Si j'ai un fichier csv, et que j'utilise le module csv, alors ligne par ligne je peux les traiter, mais pour faire quoi ? De quelle forme est le fichier csv ? Y a-t-il un header ? On pourrait dans ce cas utiliser un DictReader, non ?

    Bref, on répond à une solution, dont il n'est pas sûr qu'elle soit réellement adaptée au problème d'origine.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  13. #13
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Merci fred1599,
    Effectivement, tu as raison.
    Oui, il y a un header :
    J'utilise pour l'instant les 8 colonnes pour tracer un graphe mais il se pourrait que je fasse de la discrétisation avec.
    Je ne connaissais pas DictReader, je vais creuser.
    Bon we.
    Pas d'aide par mp.

  14. #14
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 813
    Points : 7 102
    Points
    7 102
    Par défaut
    J'utilise pour l'instant les 8 colonnes pour tracer un graphe
    Mais ces 8 colonnes ne sont-elles pas déjà créées avec le module csv ?

    Dans le cas où tu souhaites que les 8 premières colonnes, on peut très bien utiliser le slicing...

    En fait il est difficile sans un exemple de fichier, même inventé, c'est dans ce cas la forme qui est importante, pas le fond.

    Après si tu as l'opportunité d'utiliser numpy, il existe aussi des fonctions très intéressantes permettant d'éviter de recréer la roue.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  15. #15
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Le fichier csv est en fait initialement un fichier txt récupéré par copier -coller d'un logiciel.
    Voici le graphe que j'obtiens avec :

    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
    import numpy as np
    import matplotlib.pyplot as plt
    import csv
     
    # encoding en latin1 sous windows, utf8 sinon...
    entree = csv.reader(open("conduc1.csv",newline='',encoding='latin1'))
     
    liste_brute=[]
    for ligne in entree:
        liste_brute.append(ligne)
     
    legende = liste_brute[0][0].split(";")
     
    temps = []
    temperature = { x: [] for x in range(8) }
     
    for i in range(1,len(liste_brute)):
        ligne_temperature = liste_brute[i][0].split(";")
        temps.append(float(ligne_temperature[0]))
        for j in range(1,9):
            temperature[j-1].append(float(ligne_temperature[j]))
     
    temps=np.array(temps)
     
    for i in range(8):
        temperature[i] = np.array(temperature[i])
     
    plt.figure(figsize=(15,6))
    for k in range(8):
        plt.plot(temps,temperature[k],label=legende[k+1])
    plt.legend(loc='center left', bbox_to_anchor=(0.9, 0.3))
    plt.title("Températures en fonction du temps")
    plt.show()
    et voici un extrait de mon fichier txt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    temps (s)	sonde 0 (°C)	sonde 1 (°C)	sonde 2 (°C)	sonde 3 (°C)	sonde 4 (°C)	sonde 5 (°C)	sonde 6 (°C)	sonde 7 (°C)	
    1	18.0	16.5	15.3	15.3	14.5	14.9	15.3	15.3	
    2	18.4	16.5	15.3	15.3	14.5	14.9	15.3	15.3
    Remarque : le #65279 n'apparaît nulle part sauf ici !
    Pas d'aide par mp.

  16. #16
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 813
    Points : 7 102
    Points
    7 102
    Par défaut
    Ah oui clairement tu peux tout faire en numpy + matplotlib !!!

    EDIT: Je ne comprend pas le split(';'), je ne vois pas dans ton fichier exemple de points virgule ?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  17. #17
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Après la ligne 12, un "print(legende)" me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ['temps (s)', 'sonde 0 (°C)', 's
    onde 1 (°C)', 'sonde 2 (°C)', 'sonde 3 (°C)', 'sonde 4 (°C)', 'sonde 5 (°C)', 'sonde 6 (°C)', 'sonde 7 (°C)']
    Le souci, c'est que j'opère à la base sous windows au boulot, que j'enregistre dans un fichier rtf (avec un premier pc), puis converti en txt puis enfin en csv avec un deuxième pc.. Je suis chez moi sous linux...
    Il va falloir que j'améliore la procédure.
    Pas d'aide par mp.

  18. #18
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 813
    Points : 7 102
    Points
    7 102
    Par défaut
    Un fichier csv est un fichier texte, j'ai l'impression que ce genre de manipulation n'est pas très utile, si ? Vois-tu une différence dans la forme qui te permettrait d'en voir une plus-value ?

    Ensuite je préférerais partir à la source, en travaillant avec les arrays de numpy, en utilisant la fonction genfromtxt du module numpy
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  19. #19
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    J'ai été contraint de faire cela pour que cela fonctionne.
    Mais avec 3 pc différents, ...
    genfromtxt, je ne connais pas : cela m'ennuie de m'éparpiller.
    Je vais tenter d'installer python sur le premier pc de façon gérer dès l'acquisition.
    Pas d'aide par mp.

  20. #20
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 813
    Points : 7 102
    Points
    7 102
    Par défaut
    Ça te permettra de charger très efficacement tes lignes de fichier dans des arrays made un numpy, tu seras pas déçu du voyage
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Sécurité] $_ENV => Liste des variables liées
    Par Romanops dans le forum Langage
    Réponses: 8
    Dernier message: 17/04/2007, 15h07
  2. Réponses: 3
    Dernier message: 07/12/2006, 12h23
  3. [POO] Liste des variables de mon Objet
    Par hisy dans le forum Langage
    Réponses: 2
    Dernier message: 20/09/2006, 10h51
  4. STL List et variable globale (extern)
    Par flipper203 dans le forum SL & STL
    Réponses: 9
    Dernier message: 04/07/2006, 14h20
  5. [CSS] list à largeur variable
    Par laurent_h dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 03/05/2006, 15h17

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