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 :

Liste / tableau, je n'y arrive pas


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mars 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mars 2009
    Messages : 120
    Par défaut Liste / tableau, je n'y arrive pas
    Bonjour,

    Contexte:
    Je bascule une station météo qui est sur un vieux portable en Seven vers un Raspberry (avec WeeWX pour les connaisseurs). J'ai un programme maison en VB NET que j'essaie d'adapter en Python. Je suis néophyte (en Python) J'apprends au fur et à mesure et j'ai du mal avec les listes / tableaux. Les exemples ne sont pas fort clairs pour moi qui vient de + de 40 ans de BASIC, avec que quelques connaissances en c++ et php

    J'essaie donc un 1er module (qui n'a rien à voir avec la station météo) que je croyais le + simple
    J'ai des relevés de températures/humidités de 8 thermomètres (satellites TFA) répartis en fichiers couvrant chacun une heure de relevés d'au mieux 1 par minute et thermomètre (canal)
    L'objectif est d'en agglomérer comme décrit ci dessous pour en faire un fichier qui servira à faire les graphiques (en php/jpGraph après envoi par ftp sur un serveur)

    Donc, les 25 derniers fichiers (heures) sont lus en commençant par le dernier (le + récent) ; ça, c'est ok. Je dois les mettre en tableau (canal, date/heure, t°, Hum), puis trier par date selon le canal (ou trier par canal et date)

    En VB, je procédais comme suit : (le module complet est joint)

    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Structure StTfa
            Dim Dt As Date ' Date et heure
            Dim Temp As Single ' Température
            Dim Hum As Integer ' humidité
        End Structure
        Dim Tfa25h(0 To 7, 1500) As StTfa  ' 8 capteurs, 25 heures max - 60 minutes
        Dim nMesure(0 To 7) As Integer 'il peut y avoir un nombre de mesure différent par satellite

    Puis lors de la lecture des fichiers, je remplissais le tableau

    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                        nMesure(Canal) += 1
                        Tfa25h(Canal, nMesure(Canal)).Dt = Dt
                        Tfa25h(Canal, nMesure(Canal)).Temp = Val(sTbl(2)) '/ 10
                        Tfa25h(Canal, nMesure(Canal)).Hum = Val(sTbl(3))

    Au final, le fichier est une table plate :
    Canal ; date ; t° ; hum
    0;2021-1-3 17:0;4.1;81
    0;2021-1-3 17:1;4.1;81
    0;2021-1-3 17:2;4.1;81
    0;2021-1-3 17:3;4.1;81
    0;2021-1-3 17:4;4.1;81
    0;2021-1-3 17:5;4.1;81
    0;2021-1-3 17:6;4.1;81
    0;2021-1-3 17:7;4.1;81
    0;2021-1-3 17:8;4.1;81
    0;2021-1-3 17:9;4;81
    ...
    Merci de me mettre le pied à l'étrier,
    Blaise
    Fichiers attachés Fichiers attachés

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

    Vous devriez pouvoir décrire le format de vos fichiers d'entrées sans nous demander de lire le VB...

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

  3. #3
    Membre actif
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mars 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mars 2009
    Messages : 120
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Vous devriez pouvoir décrire le format de vos fichiers d'entrées sans nous demander de lire le VB...

    - W
    Et un reproche, un

    Le fichier VB est là pour information. Il me semble que j'ai donné justement pas mal d'explications dans mon post, non ?

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 746
    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 746
    Par défaut
    Citation Envoyé par Blaise Voir le message
    Le fichier VB est là pour information. Il me semble que j'ai donné justement pas mal d'explications dans mon post, non ?
    Si cela vous semble... reste à attendre des réponses et de l'aide.

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

  5. #5
    Membre actif
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mars 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mars 2009
    Messages : 120
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Si cela vous semble... reste à attendre des réponses et de l'aide.

    - W
    Hé bien m'expliquer comment faire un simple tableau comme : « Canal ; date ; t° ; hum » que je puisse trier facilement

    0;2021-1-3 17:0;4.1;81
    0;2021-1-3 17:1;4.1;81
    0;2021-1-3 17:2;4.1;81
    0;2021-1-3 17:3;4.1;81
    0;2021-1-3 17:4;4.1;81
    0;2021-1-3 17:5;4.1;81
    0;2021-1-3 17:6;4.1;81
    0;2021-1-3 17:7;4.1;81
    0;2021-1-3 17:8;4.1;81
    0;2021-1-3 17:9;4;81

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 746
    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 746
    Par défaut
    Citation Envoyé par Blaise Voir le message
    Hé bien m'expliquer comment faire un simple tableau comme : « Canal ; date ; t° ; hum » que je puisse trier facilement
    Pour vous expliquer, il y a des tutos...
    Après on peut vous montrer:

    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
    >>> data = '''0;2021-1-3 17:0;4.1;81
    ... 0;2021-1-3 17:1;4.1;81
    ... 0;2021-1-3 17:2;4.1;81
    ... 0;2021-1-3 17:3;4.1;81
    ... '''
    >>>
    >>> T = []
    >>> for s in data.splitlines():
    ...     T.append(s.split(';'))
    ...
    >>> for e in T:
    ...     print(e)
    ...
    ['0', '2021-1-3 17:0', '4.1', '81']
    ['0', '2021-1-3 17:1', '4.1', '81']
    ['0', '2021-1-3 17:2', '4.1', '81']
    ['0', '2021-1-3 17:3', '4.1', '81']
    >>>
    C'est tellement basique que "montrer" qu'on peut faire ne va pas vous servir à grand chose tant que vous n'aurez pas pris le temps d'apprendre à faire un minimum par vous même (en ouvrant un tuto).


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

  7. #7
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    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 : 4 062
    Par défaut
    Bonjour,

    Déjà un premier problème, la forme de votre fichier csv, la 1ère ligne avec des espaces ça va pas... il faut les retirer

    Quand on a des colonnes nommées, il est intéressant d'utiliser l'objet DictReader du module csv.

    Je trouve que ce n'est pas une bonne idée d'avoir des listes représentant les valeurs de chaque colonne, parce-qu'on peut les récupérer simplement dans le dictionnaire créé ligne par ligne.

    Cependant c'est votre choix,

    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
    import csv
     
    results = {
        "Canal": [],
        "date": [],
        "t°": [],
        "hum": [],
    }
     
    with open("nom_fichier.csv", "r") as f:
        reader = csv.DictReader(f, delimiter=';')
        for row in reader:
            for key in row:
                results[key].append(row[key])
     
    for key in results:
        print("liste pour {}: {}".format(key, results[key]))

  8. #8
    Membre actif
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mars 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mars 2009
    Messages : 120
    Par défaut
    Bonjour Fred,

    Merci pour votre réponse constructive

    Citation Envoyé par fred1599 Voir le message
    Déjà un premier problème, la forme de votre fichier csv, la 1ère ligne avec des espaces ça va pas... il faut les retirer
    C'est le fichier de sortie, qui convient fort bien en entrée pour le php. Et ce n'est pas là qu'est mon problème

    Je ne savais pas qu'il existait une bibliothèque "csv"

    Citation Envoyé par fred1599 Voir le message
    Je trouve que ce n'est pas une bonne idée d'avoir des listes représentant les valeurs de chaque colonne, parce-qu'on peut les récupérer simplement dans le dictionnaire créé ligne par ligne
    Merci donc pour votre réponse. Je n'ai fait aucun choix, j'ai montré comment je faisais en VB. Je désire passer de tableaux « classiques » en Python, mais je n'ai toujours pas d'aide pour bien comprendre comment cela fonctionne en Python.

    -----

    Ce genre de démarche semble difficile sur ce forum où les pontes prennent de haut les débutants maladroits

    Bon WE

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Blaise Voir le message
    Bonjour Fred,
    Merci pour votre réponse constructive
    Ca c'est clairement grossier et impoli. wiztricks est peut-être très abrupt mais s'il fait l'effort de répondre, c'est aussi dans le but de t'enseigner (il aurait pu ne rien dire et te laisser dans l'ignorance) et rien que ça mérite aussi un remerciement si tu tiens à en faire. Parce que c'est vrai que quand on vient demander de l'aide sur un forum Python on ne peut pas d'une part présumer que les connaisseurs du forum connaitront VB et d'autre part tu as peut-être donné en effet beaucoup d'informations dans ton post mais ces informations sont essentiellement axées sur ta solution VB et très peu sur le fichier input. Or justement comme Python ce n'est pas VB nous on ne proposera pas une solution construite comme une copie de la solution VB mais comme une pure solution Python construite sur des outils Python et dans ce cas, ce dont a besoin c'est une description précise de ce qui entre et de ce qui doit sortir. D'ailleurs, sans même regarder ton VB, fred1599 est immédiatement allé au module csv qui offre tout un tas d'outils pour traiter et exploiter un fichier csv. Attention à ne pas poster un problème XY quand on vient poser une question.

    Citation Envoyé par Blaise Voir le message
    Les exemples ne sont pas fort clairs pour moi qui vient de + de 40 ans de BASIC, avec que quelques connaissances en c++ et php
    Il faut essayer d'oublier C++ (qui part d'un tableau déjà existant et qui n'offre que la possibilité d'y mettre des valeurs ou les récupérer). Python lui, part d'un tableau vide (tab=list()) et offre d'abord la possibilité de le remplir élément par élément (on ne peut pas remplir l'élément 1 si on n'a pas d'abord rempli le 0) via la méthode append() puis ensuite permet de récupérer les éléments du tableau par leurs indices.
    Le reste de ce qu'offre Python concernant les tableaux ne sont que des raccourcis de cette façon de faire (en écrivant par exemple tab=[1, 2, 3] Python commencera par créer "tab" puis le remplira avec les 3 valeurs). La méthode extend() sera comme si on avait écrit une suite de append() de même qu'une addition de deux tableaux qui en donne un 3°.
    Le reste ce n'est que de l'approfondissement. Un tableau 2D ce n'est qu'un tableau où chaque élément est lui-même un tableau 1D.

    Citation Envoyé par Blaise Voir le message
    Je désire passer de tableaux « classiques » en Python, mais je n'ai toujours pas d'aide pour bien comprendre comment cela fonctionne en Python.
    Le tutoriel reste quand-même un bon point de départ. J'avais plusieurs années de C/C++ (que j'enseignais même) puis on m'a donné un truc à faire en Python que je ne connaissais pas du tout. J'ai alors commencé par télécharger un tuto et sans m'occuper de mon truc que j'ai totalement mis de côté, je me suis mis au tuto, lu et étudié les exemples. Et seulement ensuite je suis revenu à mon truc.

    Citation Envoyé par Blaise Voir le message
    Ce genre de démarche semble difficile sur ce forum où les pontes prennent de haut les débutants maladroits
    Pas maladroits dans Python (ça on peut comprendre), maladroits dans la façon d'aborder leur problème en tentant d'y appliquer des techniques issues d'un autre langage qui ne peuvent pas s'y appliquer et sans prendre le temps de se mettre d'abord au nouveau langage. Et ça on aime moins. Parce que l'apprentissage reste une démarche qu'on ne peut pas faire pour toi.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Membre actif
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mars 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mars 2009
    Messages : 120
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Déjà un premier problème, la forme de votre fichier csv, la 1ère ligne avec des espaces ça va pas... il faut les retirer
    Au temps pour moi, je voulais simplement expliquer le contenu des lignes du fichier. Cette 1ère ligne est une ligne de titres descriptive qui n'est pas dans ce fichier !

    Mais comme je disais, il n'est pas évident de faire une correspondance entre un tableau classique et les machins Python

  11. #11
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    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 : 4 062
    Par défaut
    Ça ne changera pas grand chose on prend reader qui permet de lire ligne par ligne le fichier sans en-tête.

    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
    import csv
     
    results = {
        "canal": [],
        "date": [],
        "temp": [],
        "hum": [],
    }
     
     
    with open("mon_fichier.csv", "r") as f:
        reader = csv.reader(f, delimiter=';')
        for row in reader:
            for ind, key in enumerate(results):
                results[key].append(row[ind])
     
    for key in results:
        print("liste pour {}: {}".format(key, results[key]))

Discussions similaires

  1. Petit Exercice de Tableau (Que je n'arrive pas à résoudre.)
    Par Aigle-Royal dans le forum Débuter
    Réponses: 14
    Dernier message: 24/04/2020, 13h35
  2. Réponses: 4
    Dernier message: 22/09/2014, 16h53
  3. [AJAX] Un tableau que je n'arrive pas à remplir.
    Par tidus_6_9_2 dans le forum AJAX
    Réponses: 1
    Dernier message: 14/05/2010, 11h09
  4. Réponses: 3
    Dernier message: 28/05/2007, 07h47
  5. j'arrive pas a selectionner les champ d'un tableau a mysql
    Par ghita269 dans le forum Administration
    Réponses: 3
    Dernier message: 04/07/2006, 12h38

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