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. #41
    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
    Bonsoir

    Comment ça tu ne peux pas les lire ? A première vue ça a l'air correcte, néanmoins en écriture passe en mode "wb", "ab" ajoute en fin de fichier tandis que "wb" écrase le contenu avant de réécrire. Le problème peut venir de là, si jamais le premier objet enregistré avait un soucis. Si ça marche, on déterminera le mode le plus adapté à ton utilisation

  2. #42
    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,

    En fait, j'utilise le mode 'ajout' car je veux sauvegarder l'ensemble de mes objets 'Prelevement' et pas uniquement le dernier.

    Lorsque je dis que je n'arrive pas à lire mes données en utilisant la méthode 'load' du module pickle, c'est que je n'arrive pas à les afficher (non criptées) dans ma console.

    Je ne suis pas très clair peut-être ??

  3. #43
    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
    Bonsoir,

    OK c'est ce que je pensais aussi. Néanmoins fais attention si jamais tu devais modifier un prélèvement qui se trouve en plein milieu du fichier, ça pourrait créer des problèmes.
    Ça peut venir d'un problème d'encodage, tyrtamos a écrit un post la-dessus, je met le lien dès que je le retrouve

    ÉDIT :
    Le lien, et la partie qui nous intéresse :

    Citation Envoyé par tyrtamos
    2- Avec Python 2.x, il faut travailler le plus possible en unicode, c'est à dire convertir le plus vite possible les données qui rentrent, et le plus tard possible le données qui sortent. Pour les données à échanger avec le disque, le module 'codecs' est très bon. Avec les autres entrées-sorties, il faut utiliser x.decode('iso-8859-15') pour convertir en unicode un 'x' initialement en 'iso-8859-15', et x.encode('iso-8859-15') pour convertir en 'iso-8859-15' un 'x' initialement en unicode.

    Voilà des exemples concrets:

    - créer un fichier texte comportant un "é" + fin de ligne, encodé 'iso-8859-15':

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import codecs
     
    nf = "test.txt"
    x = u"é" # x est en unicode
    with codecs.open(nf, 'w', 'iso-8859-15') as f:
        f.write(x + "\n")
    - lire le contenu de ce fichier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    with codecs.open(nf, 'r', 'iso-8859-15') as f:
        ch = f.readline().rstrip() # rstrip supprime la fin de ligne
        # ch est en unicode
     
    print ch, ch==u"é"
    é True
    3- ne pas oublier que la console d'affichage a elle aussi un encodage: il faut quelquefois convertir le chaine pour qu'elle s'affiche correctement. Cependant, de plus en plus acceptent l'affichage correct des chaines en unicode.

  4. #44
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 784
    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 784
    Points : 7 043
    Points
    7 043
    Par défaut
    Le module est assez spécial dans le sens, où pour chaque données que tu voudras récupérer, tu devras autant de fois appeler la fonction load.

    Pas testé mais si tu as enregistré plusieurs prelevement, on peut tenter ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    prelev = ' '
    while prelev:
        prelev = pickle.load(f)
        # traitement de tes prélèvements
    Ensuite la fonction dump a un paramètre protocol permettant de distinguer certaines versions python. En général on utilise le 2 ou le 0.
    Etant donné que tu as testé le 0 (par défaut), tentes le 2 et donne nous des retours.
    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. #45
    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
    Le code de fred1599 est bon, tu dois néanmoins ne pas oublier de créer f (le fichier qui contient les prélèvements), et de gérer l'exception levée quand il n'y a plus rien à lire (EOFError).

    Je te mets le code, regarde le si tu veux mais tu peux aussi essayer de le faire seul

    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
     
    p = '  '
     
    with open("test.prlvmt", "rb") as prvlmtFile:
        unpickler = pickle.Unpickler(prlmvtFile)
        try:
            while p:
                p = unpickler.load()
                #Fais ce que tu veux
        except EOFError:
            pass

  6. #46
    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 à tous.

    J'ai mis en pratique vos conseils et testé la partie de code que vous m'avez soumis.

    Lorsque j'ouvre mon fichier 'Analyses chimiques', répertoriant l'ensemble de mes enregistrements de prélèvements, ces derniers apparaissent, effectivement, encodés:
    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
    (i__main__
    Prelevement
    p0
    (dp1
    S'hyd'
    p2
    S'12'
    p3
    sS'temp'
    p4
    S'30'
    p5
    sS'date_Prel'
    p6
    S'15/11/12'
    p7
    sS'ph'
    p8
    S'8'
    p9
    sS'azt'
    p10
    S'67'
    p11
    sS'id'
    p12
    S'20121115'
    p13
    La fonction 'load' doit les charger mais ne les affiche pas dans le shell python (>>>)

    Moi pas comprendre

  7. #47
    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
    Avec :j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <__main__.Prelevement instance at 0x1012864d0>
    <__main__.Prelevement instance at 0x1012869e0>
    <__main__.Prelevement instance at 0x1012864d0>
    <__main__.Prelevement instance at 0x1012869e0>
    <__main__.Prelevement instance at 0x1012864d0>
    <__main__.Prelevement instance at 0x1012869e0>
    <__main__.Prelevement instance at 0x1012864d0>
    <__main__.Prelevement instance at 0x1012869e0>
    <__main__.Prelevement instance at 0x1012864d0>
    <__main__.Prelevement instance at 0x1012869e0>
    <__main__.Prelevement instance at 0x1012864d0>
    <__main__.Prelevement instance at 0x1012869e0>
    <__main__.Prelevement instance at 0x1012864d0>
    <__main__.Prelevement instance at 0x1012869e0>
    Mais toujours pas mes dictionnaires

  8. #48
    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
    Bonsoir,

    La fonction load renvoie un objet du type que tu as enregistré, dans ton cas un objet (ou des) objet(s) Prelevement. Tu dois donc les traiter en tant que telle, pourquoi un dictionnaire ?

  9. #49
    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
    Salut Darkemal

    Je dois faire des amalgames mais j'avais cru comprendre que la fonction "écriture" permettait d'enregistrer nos prélèvements sous la forme d'un dico avec ses clés 'id', 'date_Prel', etc...et ses valeurs renseignées par l'intermédiaire des 'raw_input'.

    Amicalement.

  10. #50
    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
    Tu dois effectivement mélanger un peu avec ce que j'ai dit quelques posts auparavant Quoiqu'il en soit tu n'as pas à t'occuper de comment est géré l'écriture/la lecture, tu as juste à savoir que si tu écris un objet X, c'est un objet X que la fonction load() te renverra ! Je suis clair ?

  11. #51
    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,

    Je suis complétement bloqué!

    Je vais tenté, ici, de mettre à plat ce que nous voulons obtenir:

    -une application très simple qui permette d'entrer des valeurs dans un "tableau",
    -ces valeurs correspondent à différents champs qui caractérisent un prélèvement, qui doit unique.
    -il y a un prélèvement par semaine.
    -un prélèvement c'est : un identifiant, une date de prélèvement, un taux d'hydrocarbures, un taux d'azote total, un pH et une température.
    -chaque valeur doit pouvoir être rappelée pour édition, modification, suppression et/ou manipulation pour des graphes etc...

    ex classique d'un tableau Excel avec une colonne par champ et une ligne par prélèvement.

    J'ai créé un objet Prelevement (voir code précédent) mais ne vaut-il pas mieux que mon objet Prelevement soit un dictionnaire pour pouvoir le manipuler de manière plus souple?

    Cordialement,

  12. #52
    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
    Salut,

    Eh ben dis donc, tu tiens à ton dictionnaire :O Je pense pas que ça soit une bonne idée, pourquoi ?
    • Un objet est bien plus pratique qu'un dictionnaire, avec les méthodes, les propriétés, etc ...
    • Le jour où tu voudra faire une liste de tes prélèvements, tu aura donc une liste de dictionnaires, ça donnera un code pas très clair pour le parcours.


    Mais pourquoi veux-tu en faire un dictionnaire ?

  13. #53
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 241
    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 241
    Points : 36 698
    Points
    36 698
    Par défaut
    Hu?!?

    Par défaut, une "class" (Prélèvement) sera associée à un dictionnaire - accessible via __dict__ - qui regroupera l'ensemble des attributs.

    On pourra distinguer, parmi ces attributs, ceux qui correspondent à:
    -un prélèvement c'est : un identifiant, une date de prélèvement, un taux d'hydrocarbures, un taux d'azote total, un pH et une température
    en créant un attribut "fields" donnant les noms correspondants.

    On peut aussi ranger cela dans une "boîte" à part (et pourquoi pas un dictionnaire).
    La difficulté est qu'une instance de "Prélèvement" sera associée à un ensemble de valeurs correspondant à un prélèvement.

    Mais dès qu'il y en a plusieurs dans un fichier, il va falloir mettre en place des "trucs" pour gérer l'ensemble.
    Basiquement, on peut créer une classe Prélèvements (avec un "s") qui gère la liste des Prélèvement et pourra s'occuper de sauvegarder, restaurer, ...
    Effectivement, dans ce cas, Prélèvement pourrait se réduire a un simple dictionnaire.

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

  14. #54
    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 KSD ou le vide intersidéral
    Bonjour à tous,

    Oublions ce qui a été dit précédemment.

    Comment vous, experts python, feriez pour créer une application de gestion basique (dans un premier temps sans utiliser sqlite3) de renseignements d'une 'table' (fichier), pour pouvoir atteindre un enregistrement particulier, l'éditer, le modifier, l'annuler???

    Amicalement,

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

    Comment vous, experts python, feriez pour créer une application de gestion basique (dans un premier temps sans utiliser sqlite3) de renseignements d'une 'table' (fichier), pour pouvoir atteindre un enregistrement particulier, l'éditer, le modifier, l'annuler???
    Si vous ne voulez pas utiliser Sqlite3, vous pouvez passer par le module .CSV et imposer une lecture du fichier au début et une écriture de l'ensemble des enregistrement "à la sortie" du programme.
    Sqlite n'est là que pour permettre un accès direct aux "Prélèvement"s suivant leur clé primaire et éviter de tout charger en mémoire.

    Vous pouvez aussi poser que vos enregistrement sont des champs texte séparés par des ';' et passer par des .split et des .join (au lieu de .CSV).

    Vous aurez dans ce cas une liste d'objets "Prélèvement"...
    Et la dualité entre l'enregistrement et la collection.

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

Discussions similaires

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

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