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 :

souci lecture detail registre [Python 2.X]


Sujet :

Python

  1. #21
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Thierry_V Voir le message
    bonsoir,


    si je modifie mon code

    je dois enlevé '\n' à gauche de joint car il affiche un caractère l'un en dessous de l'autre

    fichier.write(unicode("".join("Pilote Package ID < "+x+" > Données : "+d_values[x]+'\n\r')).encode("utf-8"))
    fichier.write(unicode("".join("Nom d'affichage < "+x+" > Données : "+d_values[x]+'\n\r')).encode("utf-8"))
    fichier.write(unicode("".join("Description < "+x+" > Données : "+d_values[x]+'\n\r')).encode("utf-8"))
    Quelle drôle d'idée ?

    Pourquoi faites-vous un str.join(iterable) sur une chaîne de caractères ?

    Documentation : https://docs.python.org/2.7/library/....html#str.join

    Généralement, on applique "sep".join(list) quand on veut que les éléments (string) d'une liste Python soient fusionnés en chaîne de caractères avec pour séparateur sep.

    exemple : "/".join(['a', 'b', 'c']) => "a/b/c"

    faire "".join("abc") revient à se compliquer la vie pour écrire tout simplement "abc" puisque "".join("abc") == "abc".

    le décodage est ok, mais pourquoi la deuxième ligne est placée au de la première et que la troisième est correcte ?
    Dans le fichier ?

    Parce que les valeurs d'une sous-clé sont placées dans un objet dict() Python et que les éléments d'un dict() ne sont pas triés.

    Si vous voulez un ordre précis d'apparition, il faut utiliser des objets comme collections.OrderedDict : https://docs.python.org/2.7/library/...eddict-objects

    alors la premier ligne from __future__ import unicode_literals ne sert à rien ?
    le plus simple pour le savoir est de commenter cette ligne, d'enregistrer le script, de le lancer et de voir ce qui se passe...

    @+.

  2. #22
    Membre régulier Avatar de Thierry_V
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2013
    Messages : 153
    Points : 82
    Points
    82
    Par défaut
    ben votre code : fichier.write(unicode("\n".join(data)).encode("utf-8")) d'ou le reflexe de placer ma chaine (sans réflechir pour le coups)

    donc à la place data je construis une maquette au lieu de mettre ma chaine.
    oui l'inscription n'est que dans le fichier txt.

  3. #23
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Thierry_V Voir le message
    ben votre code : fichier.write(unicode("\n".join(data)).encode("utf-8"))
    oui, mais data est une liste Python e.g. ["ligne 1", "ligne 2", "ligne 3", etc]

    en faisant "\n".join(data) je fusionne en fait "ligne 1" + "\n" + "ligne 2" + "\n" + "ligne 3" + ...

    ça me permet de ne pas avoir à gérer les sauts de ligne => chaque élément de la liste est une ligne d'écriture et au dernier moment je fusionne tout d'un bloc avec comme séparateur le caractère "\n" de retour à la ligne.

    vous comprenez l'intérêt de procéder comme ça ?

    donc à la place data je construis une maquette au lieu de mettre ma chaine.
    ou l'inscription n'est que dans le fichier txt.
    non, il vous suffit de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    # au lieu d'écrire :
    fichier.write(unicode("".join("Pilote Package ID < "+x+" > Données : "+d_values[x]+'\n\r')).encode("utf-8"))
    # écrivez tout simplement :
    fichier.write(unicode("Pilote Package ID < "+x+" > Données : "+d_values[x]+'\n\r').encode("utf-8"))
    Enlevez le "".join(), là, il ne vous sert à rien.

    Mais je ne vois pas ce qui vous empêche de récupérer le code que je vous ai fourni ?

    Vous pourriez le modifier pour mieux cadrer avec vos besoins e.g. si vous ne voulez pas traiter les lignes dans une liste Python, vous pouvez créer data = "" puis remplacer les data.append("ligne ...") par data += "ligne ..." + "\n".

    à moins que vous ne teniez absolument à écrire directement dans le fichier... dans ce cas, effectivement, faites comme vous avez commencé.

    @+.

  4. #24
    Membre régulier Avatar de Thierry_V
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2013
    Messages : 153
    Points : 82
    Points
    82
    Par défaut
    Bonjour,

    je n'est pas pris le code car je dois réaliser d'autres testes sur les clés et écriture en fichier, suivant la valeur l'inscription dans le fichier change.


    oui j'ai mis : fichier.write(unicode("Nom d'affichage < "+(x)+" > Donnees : "+d_values[x]+'\n\r').encode("utf-8"))
    mais erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Traceback (most recent call last):
      File "D:\Developpement\GUW Final\essai_service.py", line 100, in <module>
        fichier.write(unicode("Nom d'affichage   < "+(x)+" > Donnees : "+d_values[x]+'\n\r').encode("utf-8"))
    TypeError: coercing to Unicode: need string or buffer, list found

  5. #25
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Thierry_V Voir le message
    Bonjour,
    oui j'ai mis : fichier.write(unicode("Nom d'affichage < "+(x)+" > Donnees : "+d_values[x]+'\n\r').encode("utf-8"))
    mais erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Traceback (most recent call last):
      File "D:\Developpement\GUW Final\essai_service.py", line 100, in <module>
        fichier.write(unicode("Nom d'affichage   < "+(x)+" > Donnees : "+d_values[x]+'\n\r').encode("utf-8"))
    TypeError: coercing to Unicode: need string or buffer, list found
    Comme l'erreur l'indique ( TypeError: coercing to Unicode: need string or buffer, list found ), votre variable d_values[x] contient une liste Python.

    Ce problème se résout généralement de lui-même si vous utilisez "texte".format() comme dans le code que je vous avais fourni ou alors :

    fichier.write(unicode("Nom d'affichage < "+(x)+" > Donnees : "+str(d_values[x])+'\n\r').encode("utf-8"))

    Mais bon, la concaténation de chaînes de caractères avec l'opérateur + c'est pas génial.

    Il est préférable de s'habituer à utiliser str.format() : https://docs.python.org/2.7/library/...tml#str.format

    @+.

  6. #26
    Membre régulier Avatar de Thierry_V
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2013
    Messages : 153
    Points : 82
    Points
    82
    Par défaut
    Citation Envoyé par tarball69 Voir le message
    Comme l'erreur l'indique ( TypeError: coercing to Unicode: need string or buffer, list found ), votre variable d_values[x] contient une liste Python.

    Ce problème se résout généralement de lui-même si vous utilisez "texte".format() comme dans le code que je vous avais fourni ou alors :

    fichier.write(unicode("Nom d'affichage < "+(x)+" > Donnees : "+str(d_values[x])+'\n\r').encode("utf-8"))

    Mais bon, la concaténation de chaînes de caractères avec l'opérateur + c'est pas génial.

    Il est préférable de s'habituer à utiliser str.format() : https://docs.python.org/2.7/library/...tml#str.format

    @+.

    j'ai essayé avec str(), cela a fonctionner puis plus, donc je vous rejoint en utilisant format().
    pour la concaténation qui n'est pas génial c'est une règle ou c'est du à python dans son utilisation qui a une préférence?
    a+

  7. #27
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Thierry_V Voir le message
    j'ai essayé avec str(), cela a fonctionner puis plus, donc je vous rejoint en utilisant format().
    pour la concaténation qui n'est pas génial c'est une règle ou c'est du à python dans son utilisation qui a une préférence?
    a+
    Non, c'est simplement que la concaténation d'une chaîne de caractères avec justement des variables qui contiennent autre chose que string provoque un tas de difficultés inutiles, en général, comme ce que vous avez eu là.

    @+.

  8. #28
    Membre régulier Avatar de Thierry_V
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2013
    Messages : 153
    Points : 82
    Points
    82
    Par défaut
    oui, je vois

    donc ça fonctionne avec ce type de ligne : fichier.write(unicode("Pilote Package ID < "+x+" > Donnees : {0} ".format(d_values[x])+'\n\r').encode("utf-8"))

    encore merci de toutes ces explications, j'ai beaucoup appris .

    Thierry

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. RegEnumValue() pour la lecture de registre
    Par scarlaty dans le forum Windows
    Réponses: 5
    Dernier message: 28/02/2008, 09h04
  2. Lecture du Registre Windows
    Par mourbare dans le forum Windows
    Réponses: 2
    Dernier message: 27/02/2008, 08h42
  3. Lecture du registre style parseur
    Par Verbalinsurection dans le forum C++
    Réponses: 4
    Dernier message: 19/10/2007, 15h15
  4. [CR9] Lecture du registre
    Par exyacc dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 04/11/2005, 11h17
  5. Réponses: 4
    Dernier message: 23/07/2003, 13h07

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