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]]))