"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.
"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.
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.
getattr est l'équivalent de objet.attribut
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 + ' ')
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)
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.
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)
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.
Fred,
Si je traduis en langage 'humain' la fonction 'ecriture':
Les variables 'fichier' et 'prelevement' sont passées en arguments de la foction 'ecriture'
Code : Sélectionner tout - Visualiser dans une fenêtre à part def ecriture(fichier, prelevement):
Création de la liste des clés du dictionnaire
Code : Sélectionner tout - Visualiser dans une fenêtre à part liste_attrs = ['id', 'date', 'hyd', 'azt', 'ph', 'temp']
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 with open(fichier, 'a') as f:
Pour chaque clé du dictionnaire située dans la liste 'liste_attrs' (boucle)
Code : Sélectionner tout - Visualiser dans une fenêtre à part for attr in liste_attrs:
La variable 'value' prend la valeur 'newPrelev.attrs'
Code : Sélectionner tout - Visualiser dans une fenêtre à part value = getattr(prelevement, attrs)
Nous écrivons la valeur de la variable 'value' dans notre fichier, que nous faisons suivre d'un espace (' ') pour les distinguer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part f.write(value + ' ')
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?
Ç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.
Effectivement le format CSV peut être une alternative intéressante!!
Une piste ???
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)
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,
Ayant peu de temps, revenons à nos moutons
OuiSi je traduis en langage 'humain' la fonction 'ecriture'
Simplement fichier et prelevement sont les paramètres de la fonction.Les variables 'fichier' et 'prelevement' sont passées en arguments de la foction 'ecriture'
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("...", "...", ...)OuiCréation de la liste des clés du dictionnaire
OuiOn ouvre notre fichier de destination en mode 'ajout' et on utilise un alias ('f')
Je dirais plutôt, "pour chaque attributs se trouvant dans liste_attrs", on traite...Pour chaque clé du dictionnaire située dans la liste 'liste_attrs' (boucle)
Pour être sûr que tu as compris, c'est l'équivalent àLa variable 'value' prend la valeur 'newPrelev.attrs'
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 prel_1 = Prelevement(...) f.write(prel_1.attrs + ' ')OuiNous écrivons la valeur de la variable 'value' dans notre fichier, que nous faisons suivre d'un espace (' ') pour les distinguer.
Sinon as-tu regardé du côté de cpickle ou pickle, est-ce dans tes cordes?
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.Prochaine étape : afficher/lire les données (l'ensemble) ou une données particulière.
Si tu as une idée de code, j'attend tes suggestions
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.N'y vois aucune flagornerie mais j'apprécie vraiment ton investissement
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)
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,
Bonjour,
J'apporte ma pierre à l'édifice. Deux choses principalement :
C'est du python ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part newPrelev['id'=20121114] => hyd=25
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 = 25Le 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 pasMais, 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.
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
Wouah!! j'aurais dû me faire confiance, j'avais écris cela :Presque
Code : Sélectionner tout - Visualiser dans une fenêtre à part newPrelev['id'=20141114].hyd=25
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.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.
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' = 20121114Mais 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?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if newPrelev.id == 20141114 : setattr(newPrelev, 'hyd', 25)
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)
C'est un dictionnaire ou pas newPrelev ?
Fred1599, pourquoi utilises-tu setattr ?
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)
J'ai été induit en erreur par le code de départ désolé.
J'ai édité mon message.
En fait on pourrait utiliser les dictionnaires en faisant
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.__dict__['hyd'] = 25
Mais setattr est vraiment fait pour ce genre de manipulation, donc autant l'utiliser...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if newPrelev.id == 20141114 : newPrelev.hyd = 25
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)
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.
Une piste...
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()
Amicalement,
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager