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 :

passage de donnees


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 202
    Points : 33
    Points
    33
    Par défaut passage de donnees
    bonjour

    voila c'est un peu difficile a expliquer

    j' ai fonction python qui me renvoie des donnees dans un fichier html


    points1 = [(<Material: CV66>, 7.949825327404338), (<Material: Al2O3>, 5.3037079262845355), (<Material: CN56>, 6.1803499982835977)]

    je separe ensuite ces donnees

    {% for x, y in points1 %}

    <td width="100" style="text-align:center"><TT><span>{{ x }} : {{ y|floatformat:2}}%</span></TT></td>

    {% endfor %}

    et j'obtiens

    CV66 : 7.95% Al2O3 : 5.30% CN56 : 6.18%

    le probleme est que si je veux envoyer points1 vers un autre fichier html
    les choses se compliquent

    j'envoie points1 via un formulaire

    <form action="...

    <td><input type="text" style= "display:none;" value= "{{ points1 }}" name="pt1" size="8" maxlength="5" </td>

    </form>

    evidemment je recupere points1

    [(<Material: CV66>, 7.949825327404338), (<Material: Al2O3>, 5.3037079262845355), (<Material: CN56>, 6.1803499982835977)]

    mais cette fois si j'essaie la même boucle for

    {% for x, y in pt1 %}

    <td width="100" style="text-align:center"><TT><span>{{ x }} : {{ y|floatformat:2}}%</span></TT></td>

    {% endfor %}

    j'obtiens

    [ : % ( : % < : % M : % a : % t : % e : % r : % i : % a : % ........

    comme une chaine de caracteres..

    si dans ma fonction python je fais un slit pour eliminer les [, <,...

    lt10 = [s.replace('[', '').replace(']', '').replace('<', '').replace('>', '').replace('Material:', '').strip() for s in pt1.split(',')]

    je vais obtenir quelque chose comme

    [u'( CV66', u'7.949825327404338)', u'( Al2O3', u'5.3037079262845355)', u'(CN56', u'6.1803499982835977)']

    je sais pas si je me suis expliqué

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2010
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 140
    Points : 182
    Points
    182
    Par défaut python etrange
    Salut pat,

    je ne comprends pas trop les tenants et aboutissants de ce que tu veux faire, et ce n'est peut être pas grave.

    Je me dis que pour ton problème tu pourrais peut être faire un eval(data) sur les entrées postées que tu recois, ca aurait pour effet d'instancier tes données qui sont des chaines de caractère (le protocole http transmet du texte et du binaire, mais pas d'instance de liste ou de Material...)

    Cordialement

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 202
    Points : 33
    Points
    33
    Par défaut passage de donnees
    le but est de recuperer les donnees sous la même forme

    CV66 : 7.95% Al2O3 : 5.30% CN56 : 6.18%

    qui me servent dans un plugin jquery...

    dans ma fonction python j'ai

    pt1 = [(<Material: CV66>, 7.949825327404338), (<Material: Al2O3>, 5.3037079262845355), (<Material: CN56>, 6.1803499982835977)]

    eval(pt1) me sort invalid syntaxe

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2010
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 140
    Points : 182
    Points
    182
    Par défaut
    Rebonjour pat,

    l'evaluation de ta chaine de caratere retourne des instances de données compréhensibles par python. lorsque tu affiches <Material: CV66>, ca ne correspond à rien dans la syntaxe python, et eval ne peut rien en faire.

    une solution possible sans considération architecturale ou autre est de surcharger une méthode __unicode__ sur ta classe Material, qui retournerait la chaine python permetant d'instancier un nouveau Material. De cette maniere, ton objet printé peut se recréer à l'identique ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class Material:
      name = 'toto'
     
      def __unicode__:
        return "Material(name='%s')" % (self.name)
    Il suffit alors de faire quelque chose comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    mat = str(Material(name='CV66'))
    $.POST('test.py',myMat = mat);
    #data postée
    monMaterial = eval(POST['myMat']) # on retrouve une instance
    pour retrouver une instance avec les données initiales
    PS: si tu as une propriété de ton objet qui est aussi un object, il faudrait pour cette technique sucharger récursivement la propriété objet

    Code approximatif, non testé et à adapter.

    Cordialement

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2010
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 140
    Points : 182
    Points
    182
    Par défaut
    re ,

    si __unicode__ ne va pas, testes avec __str__

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

    Pour échanger des données entre Python et JavaScript, il va falloir sérialiser les objets Python/JavaScript et les dé-sérialiser en objets Python/JavaScript.
    Les librairies telles que JSON et XML sont là pour ne pas avoir à coder soit même ces opérations.

    Une séquence de la forme:
    • CV66=7.949825327404338,
    • Al2O3=5.3037079262845355,
    • CN56=6.1803499982835977


    est un dict côté Python, un array côté JavaScript
    Ce sont des objets simples, pas besoin de les coder avec plus que du JSON.
    Enfin à vous de voir.

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

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 202
    Points : 33
    Points
    33
    Par défaut passage de donnees
    j'ai trouvé la solution

    voila le code

    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
    lt10 = [s.replace('[', '').replace(']', '').replace('<', '').replace(')', '').replace('(', '').replace('>', '').replace('Material:', '').strip() for s in pt1.split(',')]
     
    b=1
        for j in range(len(lt10)-3):
     
            lt11.append(float(lt10[b]))
            b+=2
     
        c=0
        for j in range(len(lt10)-3):
            lt12.append(str(lt10[c]))
            c+=2
     
        s=0
        for j in range(len(lt10)-3):
            lt13.append((lt12[s],lt11[s]))
            s+=1
    au depart, on a une liste de chaines de caracteres

    [(<Material: CV66>, 7.949825327404338), (<Material: Al2O3>, 5.3037079262845355), (<Material: CN56>, 6.1803499982835977)]


    on filtre avec split pour eliminer les '<', ']', ')', etc..

    puis de concatener dans une liste 'CV66', 'Al2O3', 'CN56'....
    concatener dans une autre liste avec la conversion float 7.94, 5.30, 6.18

    puis les couples ('Al2O3' 7.92) ('CN56' 5.66) etc...

Discussions similaires

  1. passage d'une donnee d'un formulaire a un autre
    Par koukoya dans le forum Struts 1
    Réponses: 3
    Dernier message: 05/09/2006, 12h18
  2. [Drupal] Passage de données entre applications sur différents serveurs
    Par navis84 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 26/07/2006, 11h36
  3. [Javascript] Popup et passage de données
    Par bart64 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/01/2006, 14h27
  4. taille maximale d'une base de donnée paradox
    Par Anonymous dans le forum Paradox
    Réponses: 5
    Dernier message: 14/02/2004, 17h39
  5. Passage de parametre a une anim Flash 5
    Par debug dans le forum Intégration
    Réponses: 4
    Dernier message: 03/06/2002, 17h59

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