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 :

importer tout d'un répertoire


Sujet :

Python

  1. #1
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 52
    Par défaut importer tout d'un répertoire
    Bonjour à tous,

    Je viens de reprendre le python après un an d'infidélité et j'ai quelques petits problèmes . Le but de mon script est de faire une première version "à la brute" d'un logiciel en ligne de commande pour interroger une base de données et modifier des chaînes de caractères...

    Mais ce qui me bloque pour le moment est un import.
    Je dois importer tout ce que contient un répertoire MAIS je ne connais pas les fichiers qu'il contient (.py) . En clair, ce répertoire est voué à être modifier au cours du temps, avec modification des fichiers contenus à l'intérieur, et mon programme ne doit pas en souffrir.

    J'ai cherché sur google qui ne m'a pas donné de réponses ou encore ici http://www.developpez.net/forums/sho...ort+repertoire, mais, je le répère, je ne connais pas les fichiers contenus dans le répertoire...

    En fait, il me faudrait quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from MyRepository import *
    mais ça ne marche bien évidemment pas...

    Une idée ?
    Si déjà quelqu'un pouvait me dire que ce que je souhaite est possible.... ça serait top

  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
    tu peux faire ceci:

    pour importer tous les fichiers du répertoire courant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import os
    for file in os.listdir('.'):
        try:
            exec("from "+os.path.splitext(file)[0] + " import *")
        except Exception, err: print "pas un fichier .py"
    Mais je ne suis pas sûr que niveau conception, cela soit très bien de faire comme tu souhaite le faire

  3. #3
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 52
    Par défaut
    Merci beaucoup pour ton aide... Je vais de ce pas tester ça !

    Il est vrai que niveau conception c'est pas terrible... Le problème est que ces fichiers sont relatifs chacun à un type de modification bien particulier que je dois faire sur mes chaînes de caractères.
    Et je ne sais qu'au dernier moment ce que l'utilisateur choisi...

    J'ai envisagé pour le moment 2 options :
    * tous les fichiers sont dans un répertoire et j'importe tout. Je peux avoir le même nom de fonction appelée de différents .py
    * j'ai un énorme fichier avec toutes mes modifications : et là j'ai des noms différents à gérer...

    Sauf que l'info qui me décrit la modif à faire, elle est dans la base de données... C'est plus simple pour moi d'avoir un seul champ qui me donne un nom de fichier plutôt que 25 qui me donne toutes les fonctions à utiliser (et y'en a quelques-unes...)

    C'est donc plus simple pour moi d'envisager que toutes mes fonctions ont le même nom mais qu'elles ne sont pas contenues dans le même .py...

    Je suis pas certaine d'avoir été très claire là...

    Enfin, si quelqu'un a compris et a une meilleure idée, je suis preneuse !!

  4. #4
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 52
    Par défaut
    Wala j'ai testé ça marche...
    alors j'ai mis le pitit bouton résolu

    Et merci encore !!!

  5. #5
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    le framework django a implémenté ca de maniere tres propre

    toi tu fais un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from django.package import *
    (je sais plus quel package c'est)

    et dans les faits cela import le contenu de plusieurs fichiers, il ont fait un hack dans le fichier __init__.py du package qui récupere tout le contenu des sous fichier ... tu devrais regarder les sources du projet si tu veux faire un truc propre

    je pense que pour le developpement d'un framework ou d'une API cela peut etre un bon patern mais ce n'est pas le genre de chose qui s'utilise n'importe ou n'importe comment ...

    bon courage

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Je trouverais plus propre de créer une classe pour chaque type de modification plutôt qu'un module. Ce serait le nom de la classe qui serait dans la DB; les fonctions deviendraient des méthodes de la classe. Cela permet de plus d'utiliser l'héritage pour factoriser des traitements communs à différents cas.
    Le schéma général pourrait ressembler à ceci:

    Module traitements:
    Code Python : 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
     
    class Traitement(object):
        # methodes communes à tous les traitements
        # (ou du moins une partie, elles peuvent être redéfinies).
        ...
     
    class Traitement1(Traitement):
        # premier type de traitement
        def f():
            ....
     
    class Traitement2(Traitement):
        # second type de traitement
        def f():
            ...
     
    etc...
    Pour l'utiliser:
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    import traitements
    ...
    # la variable tr contient le nom de la classe a instancier (vient de la DB)
    try:
       trait = traitements.__dict__[tr]()
    except KeyError:
       # Erreur: traitement inconnu
    trait.f() # appel d'une méthode du traitement
    Dans l'exemple ci-dessus, il n'y a pas de constructeur explicites pour les classes, ni d'attributs mais bien entendu il serait judicieux de les utiliser.
    Cela ressemble au patron de conception Stratégie, si je ne m'abuse.

  7. #7
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 52
    Par défaut
    Super dites-moi que tout cela...

    Je n'ai jamais utiliser de classes en python mais il est peut-être temps que je m'y mette !!! (je n'ai fait jusque là que de tous petits scripts tout simples)

    Je vais de ce pas tester tout ça...

    et merci encore

  8. #8
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 52
    Par défaut

    Bon j'ai un peu ramé à la création de mon constructeur vu que je ne l'avais jamais fait... mais ayé tout y marche !!!

    Encore merci pour ces bons conseils...

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/06/2009, 18h34
  2. [Galerie] Script permettant d'importer tout un dossier d'images en une seule fois
    Par luluptitbeur dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 24/05/2008, 11h00
  3. Réponses: 2
    Dernier message: 06/05/2008, 16h05
  4. Comment importer toutes les dépendances d'une DLL?
    Par Jayceblaster dans le forum Framework .NET
    Réponses: 1
    Dernier message: 13/02/2008, 13h09
  5. [MS-DOS] Supprimer tout les sous répertoires contenu dans un
    Par Furius dans le forum Scripts/Batch
    Réponses: 7
    Dernier message: 30/11/2005, 12h24

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