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 :

Avis de recherche : Tuteurs pour programmation Python


Sujet :

Python

  1. #21
    Candidat au Club
    Inscrit en
    Octobre 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 28
    Points : 2
    Points
    2
    Par défaut
    "rappelez-vous qu'un dictionnaire n'a pas de structure ordonnée"

    Je pense que viens de trouver une partie de la réponse à ma question précédente.


  2. #22
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    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 823
    Points : 7 119
    Points
    7 119
    Par défaut
    En effet un dictionnaire n'est pas ordonné, une structure possible est d'imposer l'ordre des attributs et d'appeler leur valeur par getattr.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def ecriture(fichier, prelevement):
        liste_attrs = ['id', 'date', 'hyd', 'azt', 'ph', 'temp']
        with open(fichier, 'a') as f:
            for attr in liste_attrs:
                value = getattr(prelevement, attrs)
                f.write(value + ' ')
    getattr est l'équivalent de objet.attribut
    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)

  3. #23
    Membre éclairé
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Points : 752
    Points
    752
    Par défaut
    Pour ce genre de projet, serait-ce déraisonnable d'utiliser un framework comme Django ?

    J'y vois plusieurs avantages:

    • Persistence des données simplifiée au travers d'une base de données
    • Visualisation des données facilitée (vues génériques déjà existantes)
    • Interface web facile à créer pour la saisie/consultation/modification


    C'est sans doute un peu "over kill" mais, ça faciliterait beaucoup d'étapes de conception et serait sans doute pratique après pour le dépouillement.

  4. #24
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    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 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Django, un framework web? Il ne parle pas de cela dans ses posts.

    Django n'est pas si simple, il faut déjà bien apprendre les bases python avant de commencer sur ce framework.

    Mais il me semble qu'il parlait d'interface graphique, via matplotlib, donc, ai-je mal lu quelque part?

    La stratégie me semble encore bien loin d'être appliquée à cette heure-ci
    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)

  5. #25
    Candidat au Club
    Inscrit en
    Octobre 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 28
    Points : 2
    Points
    2
    Par défaut
    Bonjour à tous!

    Fred a tout à fait cerner ma démarche : y aller étape par étape...

    Maîtriser les bases...

    Aujourd'hui nous travaillons sur une application en mode 'console'.

    Pour progresser vers quelque chose de plus intuitif comme une IHM.

    Les projets web seront pour plus tard!!

    Merci tout de même pour la proposition.

  6. #26
    Candidat au Club
    Inscrit en
    Octobre 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 28
    Points : 2
    Points
    2
    Par défaut
    Fred,

    Si je traduis en langage 'humain' la fonction 'ecriture':

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    def ecriture(fichier, prelevement):
    Les variables 'fichier' et 'prelevement' sont passées en arguments de la foction 'ecriture'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        liste_attrs = ['id', 'date', 'hyd', 'azt', 'ph', 'temp']
    Création de la liste des clés du dictionnaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        with open(fichier, 'a') as f:
    On ouvre notre fichier de destination en mode 'ajout' et on utilise un alias ('f')

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            for attr in liste_attrs:
    Pour chaque clé du dictionnaire située dans la liste 'liste_attrs' (boucle)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                value = getattr(prelevement, attrs)
    La variable 'value' prend la valeur 'newPrelev.attrs'

    Nous écrivons la valeur de la variable 'value' dans notre fichier, que nous faisons suivre d'un espace (' ') pour les distinguer.

    Est-ce exact??

    Afin de récupérer nos données pour les modifier, n'est-il pas plus indiquer d'enregistrer dans notre fichier, nos objets 'Prelevement', au moyen du module pickle?

  7. #27
    Membre éclairé
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Points : 752
    Points
    752
    Par défaut
    Ça dépend principalement du but recherché. Si tu veux que le fichier soit lisible pour un humain ou si tu veux juste la persistance des données.

    Tu pourrais aussi vouloir tout sauvegarder au format csv par exemple afin de pouvoir après analyser le contenu avec un tableur ou autre.

  8. #28
    Candidat au Club
    Inscrit en
    Octobre 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 28
    Points : 2
    Points
    2
    Par défaut
    Effectivement le format CSV peut être une alternative intéressante!!

    Une piste ???

  9. #29
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    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 823
    Points : 7 119
    Points
    7 119
    Par défaut
    J'ai une préférence pour pickle, ou plutôt cpickle (python 2.x), sinon il y a des petites incompréhensions pas très grave dans le sens où des notions ne sont pas encore familières.

    Je t'expliquerais tout ça bientôt, je suis au boulot, et ne rentre que vendredi...
    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)

  10. #30
    Candidat au Club
    Inscrit en
    Octobre 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 28
    Points : 2
    Points
    2
    Par défaut
    Fred,

    N'y vois aucune flagornerie mais j'apprécie vraiment ton investissement.

    Je pense que je vais commencer à te vouvoyer pour marquer mon respect .

    Prochaine étape : afficher/lire les données (l'ensemble) ou une données particulière.

    Amicalement,

  11. #31
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    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 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Ayant peu de temps, revenons à nos moutons

    Si je traduis en langage 'humain' la fonction 'ecriture'
    Oui

    Les variables 'fichier' et 'prelevement' sont passées en arguments de la foction 'ecriture'
    Simplement fichier et prelevement sont les paramètres de la fonction.

    fichier et prelevement pour être précis sont respectivements, une chaîne de caractères et un objet ayant une architecture Prelevement.

    Prelevement (ta classe) est le patron (dessin) permettant de dessiner/créer autant d'objet que l'on souhaite.

    exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    prel_1 = Prelevement("...", "...", ...)
    prel_2 = Prelevement("...", "...", ...)
    Création de la liste des clés du dictionnaire
    Oui

    On ouvre notre fichier de destination en mode 'ajout' et on utilise un alias ('f')
    Oui

    Pour chaque clé du dictionnaire située dans la liste 'liste_attrs' (boucle)
    Je dirais plutôt, "pour chaque attributs se trouvant dans liste_attrs", on traite...

    La variable 'value' prend la valeur 'newPrelev.attrs'
    Pour être sûr que tu as compris, c'est l'équivalent à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    prel_1 = Prelevement(...)
    f.write(prel_1.attrs + ' ')
    Nous écrivons la valeur de la variable 'value' dans notre fichier, que nous faisons suivre d'un espace (' ') pour les distinguer.
    Oui

    Sinon as-tu regardé du côté de cpickle ou pickle, est-ce dans tes cordes?

    Prochaine étape : afficher/lire les données (l'ensemble) ou une données particulière.
    Alors pickle est pas mal pour cela, mais on peut le faire en lisant/parsant un fichier texte. La méthode pickle me semble plus adaptée et pratique.

    Si tu as une idée de code, j'attend tes suggestions

    N'y vois aucune flagornerie mais j'apprécie vraiment ton investissement
    Merci, mais c'est toujours agréable quand un membre du forum cherche un minimum, après on sait très bien qu'on ne peut pas tout savoir.
    On a été dans cette situation aussi...
    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)

  12. #32
    Candidat au Club
    Inscrit en
    Octobre 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 28
    Points : 2
    Points
    2
    Par défaut
    Bonjour Fred,

    Pour tout dire, comme toi, j'ai peu de temps!!

    Cependant, j'ai effectivement regarder le module cpickle. Je pense avoir compris que grâce à la méthode 'dump', nous enregistrons les objets dans un fichier de destination et la méthode 'load' permet de les lire.

    Mais, suis-je sur la bonne piste sachant que j'aimerai, à l'image d'une base de donnée, pouvoir éditer la valeur d'une variable particulière pour pouvoir, éventuellement, la modifier.

    ex: j'ai commis une erreur en assignant la valeur '12' à ma variable 'hyd' du Prelevement possédant l' 'id' = 20121114

    j'aimerai la corriger en '25' mais comment l'appeler :
    newPrelev['id'=20121114] => hyd=25

    Amicalement,

  13. #33
    Membre du Club

    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2012
    Messages : 35
    Points : 49
    Points
    49
    Par défaut
    Bonjour,

    J'apporte ma pierre à l'édifice. Deux choses principalement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    newPrelev['id'=20121114] => hyd=25
    C'est du python ?
    Non sérieusement, je pense que newPrelev est un dictionnaire avec comme clé l'id et comme valeur l'objet c'est ça ? Donc tu devrais écrire ça plutôt pour corriger :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    newPrelev[20121114].hyd = 25

    Dans la mesure où newPrelev n'est pas un dictionnaire, le code correct serais plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if newPrelev.id = ...:
        newPrelev.hyd = 25
    Mais, suis-je sur la bonne piste sachant que j'aimerai, à l'image d'une base de donnée, pouvoir éditer la valeur d'une variable particulière pour pouvoir, éventuellement, la modifier.
    Le module pickle ressemble assez à une BDD, selon comment on l'utilise. Par exemple tu enregistres un dictionnaire contenant tout tes prélèvements (par contre je ne sais pas si ça gardera les prélèvements automatiquement dans la mesure où la valeur du dictionnaire est, sauf erreur, une référence vers l'objet) ou alors tu enregistres TOUS les prélèvements et tu recrées à chaque début de programme un dictionnaire. C'est pas très compliqué ne t'inquiète pas
    Après tu n'auras plus qu'à faire tes modifications (vachement plus simple et intuitif qu'une BDD) !

    J'espère que je t'ai aidé.

    EDIT : Je précise que je ne connais que python 3, il se peut (y'a peu de chances quand même) que ça ne s'applique qu'à lui. Je préfère prévenir, corrigez-moi au besoin.

    EDIT 2 : Après vérification dans la doc, les objets dans les listes sont sauvegardés aussi mais seulement si ceux-ci sont "sauvegardables" : doc python 2.7

  14. #34
    Candidat au Club
    Inscrit en
    Octobre 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 28
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Darkemal Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    newPrelev[20121114].hyd = 25
    Wouah!! j'aurais dû me faire confiance, j'avais écris cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    newPrelev['id'=20141114].hyd=25
    Presque

  15. #35
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    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 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Mais, suis-je sur la bonne piste sachant que j'aimerai, à l'image d'une base de donnée, pouvoir éditer la valeur d'une variable particulière pour pouvoir, éventuellement, la modifier.
    Oui, tu modifies une variable après l'avoir appelé dans ton fichier (enregistré à l'aide de pickle), et tu réenregistres à l'aide de pickle.

    1) Enregistrement de tes données (dump)
    2) Charger les données (load)
    3) Modification des données
    4) Enregistrement de tes données (dump)

    j'ai commis une erreur en assignant la valeur '12' à ma variable 'hyd' du Prelevement possédant l' 'id' = 20121114
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if newPrelev.id == 20141114 :
        setattr(newPrelev, 'hyd', 25)
    Mais suis pas sûr d'avoir tout compris, pour ce que je comprend, tu veux modifier la variable hyd à 25 si la variable id à la valeur 20141114, c'est ça?
    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)

  16. #36
    Membre du Club

    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2012
    Messages : 35
    Points : 49
    Points
    49
    Par défaut
    C'est un dictionnaire ou pas newPrelev ?

    Fred1599, pourquoi utilises-tu setattr ?

  17. #37
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    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 823
    Points : 7 119
    Points
    7 119
    Par défaut
    newPrelev est un objet Prelevement avec plusieurs attributs, non un dictionnaire, voir le début de la discussion...
    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)

  18. #38
    Membre du Club

    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2012
    Messages : 35
    Points : 49
    Points
    49
    Par défaut
    J'ai été induit en erreur par le code de départ désolé.
    J'ai édité mon message.

  19. #39
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    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 823
    Points : 7 119
    Points
    7 119
    Par défaut
    En fait on pourrait utiliser les dictionnaires en faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if newPrelev.id == 20141114 :
        newPrelev.__dict__['hyd'] = 25
    Mais selon ce qu'on a autant faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if newPrelev.id == 20141114 :
        newPrelev.hyd = 25
    Mais setattr est vraiment fait pour ce genre de manipulation, donc autant l'utiliser...
    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)

  20. #40
    Candidat au Club
    Inscrit en
    Octobre 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 28
    Points : 2
    Points
    2
    Par défaut
    Bonsoir,

    Voici le code des 2 méthodes 'ecriture' et 'lecture' adaptées au module 'pickle'.

    La première enregistre bien mes objets dans le fichiers de destination.

    La seconde charge les données mais je ne peux les lire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import pickle
    #fonction 'ecriture'
    def ecriture(fichier, prelevement):
        """écrit les données du prélèvement dans le fichier donné en attribut"""
        with open(fichier, 'ab') as f:
            my_pickler=pickle.Pickler(f)
            my_pickler.dump(prelevement)
     
    #fonction 'lecture'
    def lecture(fichier):
        """lis les données du prélèvement dans le fichier donné en attribut"""
        with open(fichier, 'rb') as f:
            my_depickler=pickle.Unpickler(f).load()
    Une piste...

    Amicalement,

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/06/2015, 14h44
  2. Réponses: 145
    Dernier message: 15/02/2009, 11h51
  3. Réponses: 3
    Dernier message: 28/08/2006, 13h06

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