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 :

Transfert d'une liste d'un programme à un autre


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Par défaut Transfert d'une liste d'un programme à un autre
    Bonjour à tous,

    Je programme actuellement des macros en python pour un logiciel. Dans ce cadre, j'aurai besoin de transférer des listes d'une macro à une autre. J'ai essayé :

    DANS L'UNE DES MACROS (qui contient lesdites listes)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    f = open("fichier de stockage de variable", 'w+')
    f.write ([str(nveh), str(nop), str(ntype)] + '\n')    # [str(nveh), str(nop), str(ntype)] est la liste de str à déplacer...
    f.close()
    DANS L'AUTRE MACRO (qui doit utiliser lesdites listes)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    f = open("fichier de stockage de variables", 'r')
    maliste = f.readlines ()
    f.close()
    # La question de suppression du retour chariot ne me pose pas de soucis...
    J'avai l'impression que ca marchait car si je fait un print de ce que je récupère, j'obtiens qqchose qui ressemble beaucoup à uner liste " [str(nveh), str(nop), str(ntype)] " mais en fait, il ne s'agit pas d'une liste mais d'une str qui contient notament des crochets, des caractères et des virgules... bref, pas une liste!
    Alors j'ai un million de question mais en gros :
    1- Y a-t-il un moyen plus cohérent de transporter une liste (dictionnaire?)
    2- Y a-t-il moyen de lui dire qu'il doit récupérer une données liste (en gros, caster ce qu'il va récupérer)
    3- tranformer ma str (qui ressemble beaucoup à une liste) en vraie liste.
    Merci d'avance à ceux qui répondront,

    Frédéric

  2. #2
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    en sauvegardant dans un fichier avec pickle ?
    http://python.developpez.com/faq/?page=Objet#ObjetSave

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Par défaut
    Guigui,

    Merci pour ta réponse. Bien qu'ayant du mal à comprendre le fonctionnement de Pickle et Marshal, j'y ai pensé mais peux tu me dire si cela me permettra de récupérer les données même après extinction du pc. En gros, mon prog crée une liste, il la stocke (comment, où???), j'éteinds le pc et quand je relance mon prog après avoir rallumé le pc, un autre prog reprends les valeurs qui avaient été stockées...
    Pickle et Marshall peuvent faire ça? (Je croyai que ca stockait uniquement dans la mémoire vive...)
    Amicalement,

    Frederic

  4. #4
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    Il n'y a pas grand chose à comprendre. Pickle/Marshall stoche dans un fichier tes données et te les recrache )à l'identique quand load ce fichier avec le même Pickel/Marshall

    Si tu en as plusieurs, tu dois passer par un conteneur (une liste, un dico, ...) dans laquelle tu mets toutes tes données. Tu pickle ton conteneur et quand tu recharges, tu récupères un conteneur avec les mêmes données.

    Exécute simplement l'exemple de la FAQ et ce sera tout de suite plus clair

  5. #5
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 2
    Par défaut
    salut, je te propose les 2 fonctions que j'emploi pour la persistance des données:

    suavegarde d'une variable dans un fichier:
    cfg_set(var_name, value)
    ex: cfg_set('maListe', (1, 2, 3))

    recuperation d'une sauvegarde dans un fichier:
    def cfg_get(var_name):
    ex: t = cfg_get('maliste')

    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
    def cfg_set(var_name, value):
        z = zipfile.ZipFile('var.zip', 'w')
        z.writestr(var_name, pickle.dumps(value))
        z.close()
     
    def cfg_get(var_name):
        if os.path.isfile('var.zip') == False:
            return ''
        z = zipfile.ZipFile('var.zip', 'r')
        if z.namelist().count(var_name) == 1:
            var = z.read(var_name)
            z.close()
            return pickle.loads(var)
        else:
            z.close()
            return ''
    Toutes les variable sont stocké sur un fichier différent pour simplifier le tout. Mais toute les 'fichiers-variable' sont contenu dans l'archive 'var.zip'.
    Ce code est pas super propre (pour les gestion d'erreur) mais il marche bien.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 24/04/2014, 15h44
  2. Réponses: 5
    Dernier message: 21/01/2014, 20h43
  3. Réponses: 5
    Dernier message: 08/01/2013, 17h03
  4. Réponses: 3
    Dernier message: 02/08/2009, 15h23
  5. Réponses: 5
    Dernier message: 12/03/2008, 18h16

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