"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.
;)
Version imprimable
"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.attributCode:
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 + ' ')
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 ;)
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:def ecriture(fichier, prelevement):
Création de la liste des clés du dictionnaireCode:liste_attrs = ['id', 'date', 'hyd', 'azt', 'ph', 'temp']
On ouvre notre fichier de destination en mode 'ajout' et on utilise un alias ('f')Code:with open(fichier, 'a') as f:
Pour chaque clé du dictionnaire située dans la liste 'liste_attrs' (boucle)Code:for attr in liste_attrs:
La variable 'value' prend la valeur 'newPrelev.attrs'Code: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: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...
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
OuiCitation:
Si je traduis en langage 'humain' la fonction 'ecriture'
Simplement fichier et prelevement sont les paramètres de la fonction.Citation:
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:
1
2 prel_1 = Prelevement("...", "...", ...) prel_2 = Prelevement("...", "...", ...)
OuiCitation:
Création de la liste des clés du dictionnaire
OuiCitation:
On 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...Citation:
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 àCitation:
La variable 'value' prend la valeur 'newPrelev.attrs'
Code:
1
2 prel_1 = Prelevement(...) f.write(prel_1.attrs + ' ')
OuiCitation:
Nous é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.Citation:
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.Citation:
N'y vois aucune flagornerie mais j'apprécie vraiment ton investissement
On a été dans cette situation aussi...
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 ? 8OCode: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:newPrelev[20121114].hyd = 25
Dans la mesure où newPrelev n'est pas un dictionnaire, le code correct serais plutôt :
Code:
1
2
3 if newPrelev.id = ...: newPrelev.hyd = 25
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 ;)Citation:
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.
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
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.Citation:
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)
Citation:
j'ai commis une erreur en assignant la valeur '12' à ma variable 'hyd' du Prelevement possédant l' 'id' = 20121114
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?Code:
1
2 if newPrelev.id == 20141114 : setattr(newPrelev, 'hyd', 25)
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...
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 faireCode:
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:
1
2 if newPrelev.id == 20141114 : newPrelev.hyd = 25
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:
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,