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 :

fonction recursive : (premier jet)


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 27
    Par défaut fonction recursive : (premier jet)

    pour changer un peut, je ne poste pas un probleme mais plutot une petite classe que j'ai pondu et qui me sert avec un chemin en parametre de me retourner un dictionnaire contenant , en cles les repertoires, en items les fichiers dans ces repertoires .. le but ? faire un fichier pour chaque cd qui traine chez moi, les mettre dans un repertoire avec des noms bien trouvé, et indexer ca avec google desktop .. hisotire de retrouver le cd du fichier musical perdu ou du film caché ..
    et biensur tester un peu de recursivité ..
    vos commantaires sont les bienvenus.

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    #!/usr/bin/python
    # -*- coding: latin1 -*-
    """
    L'idée de depart est de faire une classe qui lit l'arborecence d'un
    disque/répertoire et en fait un dictionnaire. Le but est de faire un
    fichier texte pour chaque cd scanné afin de retrouver facilement un
    fichier dans tout un tas de cds mal rangé :)
    """
    import os,sys,UserDict, exceptions
     
     
    class diskinfo(UserDict.UserDict):
        """
    Donner le chemin du repertoire, ou du disque a explorer en parametre
    [diskinfo('C:\\')] retourne un dictionnaire avec cles=repertoires et
    items=fchiers dans ces repertoires
    """
        def __init__(self,dpath="/"):
            UserDict.UserDict.__init__(self)
            self.dpath=dpath
            self.scandeep()
     
        def __explorep(self,p=False):
            """
    explorep(p) retourne deux listes la premieres est
    la liste des repertoires, la seconde est la liste des fichiers du path"""
            if not p:
                p=self.dpath
            if not os.path.exists(p):
                raise exceptions.IOError,  "le chemin n'existe pas"
            d=os.listdir(p)
            ed,ef=[],[]
            pjoin=os.path.join
            for sd in d:
                pj=pjoin(p,sd)
                if os.path.isdir(pj):
                    ed.append(pj)
                else:
                    ef.append(os.path.split(pj)[-1])
            return ed,ef
     
        def scandeep(self,p=False):
            """
    scandeep(p) est utilisee recusivement pour sonder
    tous les sous repertoires de path=p et remplis le dictionnaire"""
            if not p:
                p=self.dpath
            d,f=self.__explorep(p)
            if d:
                for subdir in d:
                    self[p]=f   #dictionnaire de la classe elle meme
                    self.scandeep(subdir)
            else:
                self[p]=f
     
    class cnt:
        """
    classe compteur simple cnt(n) n valeur de depart
    methode pl(n=1) incremante cnt """
        def __init__(self,cnt=0):
            # print "nouvelle instance de cnt"  #(debug)
            self.c=cnt
        def pl(self,n=1):
            # print "appel de pl"               #(debug)
            self.c=self.c+n
            return self.c
     
     
    if __name__=='__main__':
        """
    exemple d'utilisation:
    ici en fesant [python disklister.py /mnt/cdrom > planete-linux_n47],
    on crée un fichier contenant toute l'arborecence du cd"""
        try:
            if sys.argv[1]:
                p=sys.argv[1]
        except:
            p=raw_input("Quel repertoire explorer ? : ")
        try:
            dinf=diskinfo(p)
        except:
            print "Le chemin donné :'%s' n'existe pas"%p
            sys.exit()
        keys=dinf.keys()
        keys.sort()
        for k in keys:
            c=cnt()
            print "[%s]\n\t%s"%(k,"\n\t".join([(str(c.pl())+" = "+f) \
                                               for f in dinf[k]]))

  2. #2
    Membre émérite
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    import os.path
     
    def dirs_and_files(dir):
        dirs = []
        def add_dirs_and_files(arg, directory, files):
            dirs.append((directory, files))
        os.path.walk(dir, add_dirs_and_files, None)
        return dirs

  3. #3
    Membre émérite
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Par défaut
    Hmmm, encore mieux:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    import os
     
    def dirs_and_files(dir):
        return [(root, files) for root, _, files in os.walk(dir)]

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 27
    Par défaut
    effectivement dans le module os il y a cette fonction que je ne connaissait pas bien evidement, sinon je m'en serais servi et ca m'aurait bien macher le travail ... ceci dis j'etait quand meme content ya 10 mins

Discussions similaires

  1. [Debutante] Fonction recursive avec un pointeur
    Par kidney dans le forum Débuter
    Réponses: 9
    Dernier message: 25/03/2006, 08h08
  2. Condition en fonction du premier caractére?
    Par thibaut06 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 10/02/2006, 02h52
  3. Réponses: 3
    Dernier message: 22/12/2005, 11h20
  4. [XSL]Probleme fonction recursive
    Par Le-Cortex dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 12/12/2005, 15h10
  5. probleme sql, fonction recursive
    Par CaptainChoc dans le forum Langage SQL
    Réponses: 2
    Dernier message: 21/11/2005, 01h45

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