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