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 :

Module dont le nom est une variable


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Mr Hyde
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 80
    Par défaut Module dont le nom est une variable
    Bonjour à tous!

    Voici mon problème: Je dispose de 10 fichiers .py dont les noms vont de fich_1.py à fich_10.py.

    Dans un autre post, guigui m'a expliqué comment importer des fichiers dont le nom est une variable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for val in range(10):
          monimport = 'fich_'+str(val)
          exec('import '+monimport)
    En fait, ces fichiers contiennent des variables...mon problème est que je ne sais pas comment les récuperer dans ces fichiers. Par exemple une de ces variables s'appelle id.

    J'ai essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    nom_var="fich_1.id"
    print nom_var
    Mais évidemment, vu qu'il sagit d'une chaine de caractère, ca n'a pas marché....

    Quelqu'un sait-il comment récuperer mon id : :

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2004
    Messages : 118
    Par défaut
    Essaie ceci:

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    519
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 519
    Par défaut
    pourquoi tu fais pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nom_var=fich_1.id
    print nom_var

  4. #4
    Membre confirmé Avatar de Mr Hyde
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 80
    Par défaut
    Merci beaucoup Onarap !!
    C'est parfait!

    pourquoi tu fais pas:
    Code:
    nom_var=fich_1.id
    print nom_var
    Car j'ai beaucoup de fichiers fich_ (fich_1, fich_2, fich_3,.....) et mon programme en génère régulièrement. Il faut que je puisse traiter ca dans une boucle... et si je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nom_var="fich_"+str(un_chiffre)+".id"
    Je ne peu plus utiliser print ou quoi que ce soit d'autre car ce sera directement interpreté comme une chaine de caractères et non comme un nom de variable...mais bon maintenant tout va bien! Onarap m'a sauvé! Merci encore!!

  5. #5
    Nouveau membre du Club Avatar de tmeg57
    Homme Profil pro
    DevOps
    Inscrit en
    Juillet 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : DevOps

    Informations forums :
    Inscription : Juillet 2014
    Messages : 7
    Par défaut
    Citation Envoyé par Mr Hyde Voir le message
    Dans un autre post, guigui m'a expliqué comment importer des fichiers dont le nom est une variable:
    Hello Mr Hyde,

    As tu la référence de ce post svp ? Je suis confronté au même problème, jJ'ai cherché dans ton historique de message mais pas reussi à retomber dessus...
    Merci d'avance.

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 818
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tmeg57 Voir le message
    jJ'ai cherché dans ton historique de message mais pas reussi à retomber dessus...
    T'aurais simplement cherché dans la doc de import...

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> x="os"
    >>> os=__import__(x)
    >>> os.getcwd()
    '/tmp'
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Nouveau membre du Club Avatar de tmeg57
    Homme Profil pro
    DevOps
    Inscrit en
    Juillet 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : DevOps

    Informations forums :
    Inscription : Juillet 2014
    Messages : 7
    Par défaut
    testé et approuvé, merci Sve@r.

    Désolé, je débute avec python et j'ai, à tord, pas forément encore les bons reflexes.
    En parlant de bonne pratiques .Je m'en vais aussi aller lire la faq au passage.

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 818
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tmeg57 Voir le message
    Citation Envoyé par tmeg57 Voir le message
    Je suis confronté au même problème
    Désolé, je débute avec python
    Un débutant Python ne devrait pas avoir de souci d'import variable (il n'aurait pas conçu un projet suffisamment complexe pour en arriver là). Ce qui laisse penser que ton souci est plutôt un souci de mauvaise conception...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Nouveau membre du Club Avatar de tmeg57
    Homme Profil pro
    DevOps
    Inscrit en
    Juillet 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : DevOps

    Informations forums :
    Inscription : Juillet 2014
    Messages : 7
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Un débutant Python ne devrait pas avoir de souci d'import variable (il n'aurait pas conçu un projet suffisamment complexe pour en arriver là). Ce qui laisse penser que ton souci est plutôt un souci de mauvaise conception...
    Oui, c'est probablement le cas et je suis tout à fait ouvert à discussion pour m'orienter vers une meilleur voie.

    Je cherche à centraliser mes différentes automatisation au sein d'une boite à outils centrale pour gagner du temps et lancer plus rapidement/facilement mes différents outils.
    J'ai prévu de passer via un mini programme à menu en ligne de commande.
    Je suis tombé sur la possibilité de passer par la commande import pour faire l'appel à mes différents scripts externes, mais le lancement du programme importé ne marche que la première fois et je dois passer par un reload si le module a déjà été importé : d'où mon besoin de passer par une fonction avec variabilisation.

    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
    29
    30
    31
    32
    33
    34
    35
    36
     
    import sys
    import importlib
     
    MENU = """
    | ################################################################### |
    |                            Menu                                     |
    | ################################################################### |
    |  1: getK                                                            |
    | 99: Quitter                                                         |
    | ################################################################### |
    Votre choix : 
    """
    MENU_CHOICES = ['1', '99']
     
    def launch_prog(programme):
         if not programme in sys.modules:
              __import__(programme)
              # ou exec(f'import {programme}')
         else:
             importlib.reload(sys.modules[programme])
     
    # ------------------------- MAIN Program ----------------------------------------------------
    while True:
        user_choice = input(MENU)
        print(f"  ==> {user_choice}")
        if user_choice not in MENU_CHOICES:
            print("Veuillez choisir une option valide...")
            continue
     
        if user_choice == "1":  # Ajouter un élément
            launch_prog('getK')
        elif user_choice == "99":  # Quitter
            print("À bientôt !")
            sys.exit()
        print("-" * 50)
    Je prévois aussi d'ajouter la possibilité de spécifier des arguments aux différents programmes.

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 02/07/2021, 17h44
  2. Appel de procédure dont le nom est une variable
    Par TOF1414 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 29/08/2012, 16h36
  3. [AC-2003] Propriétés d'un champ dont le nom est une variable
    Par AndréPe dans le forum VBA Access
    Réponses: 3
    Dernier message: 05/02/2012, 09h36
  4. [PowerShell] Acces variable dont le nom est une variable
    Par marion782 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 12/09/2011, 11h16
  5. Instancier une classe dont le nom est une variable
    Par bendev dans le forum Langage
    Réponses: 1
    Dernier message: 06/11/2006, 06h01

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