# -*- coding: cp1252 -*- """ C: \ fic applis toto start adm fic rep titi bigcat sauv listes: dirbase : start disk : C: path : \applis sousrep : adm,fic,rep freres: toto,titi,bigcat pour chaque fichier : taille, date, heure, flags ? pour chaque élément d'une liste : filtre (liste + antiliste)+filtre sur les x premiers, sur date, sur taille compress testcompress decompress renomme ? macro copie envoiftp delete destination task_planifiée callback exemples: disk=C: path=\cli\coll dirbase=cow dest=R:\sauv zip u [*.*] zip t copyzip dest+dirbase pour sousrep """ import os,os.path,string,re import time import shutil class orep(object): def __init__(self,dirbase=None,disk='C:',path='\\',sousrep=[],freres=[]): if dirbase==None: st=os.getcwd() if st[1]==':': self.disk=st[:2] lst=st.split('\\') self.dirbase=lst[-1] self.path=string.join(lst[:-1],'\\')[2:]+'\\' elif st.startswith('\\\\'): self.disk='' lst=st.split('\\') self.dirbase=lst[-1] self.path=string.join(lst[:-1],'\\')+'\\' else: self.disk=disk self.path=path self.dirbase=dirbase if not self.path.endswith('\\'): self.path=self.path+'\\' if self.dirbase.endswith('\\'): self.dirbase=self.dirbase[:-1] lfic=os.listdir(self.disk+self.path) lfic=os.listdir(self.disk+self.path+self.dirbase) self.dest=self.disk+self.path+self.dirbase+'\\' self.sousrep=sousrep self.lfic=[] self.afic={} for sst in lfic: nomlong=self.disk+self.path+self.dirbase+'\\'+sst if os.path.isdir(nomlong): if sousrep!=[]: self.sousrep.append(sst) else: self.lfic.append(sst) stat1=os.stat(nomlong) self.afic[sst]=(stat1[8],stat1[6]) self.lfic.sort() self.ffic=self.lfic def filtre(self,*param): self.ffic=self.lfic def filtreext(self,*param): templst=[] filtrext=[] for i in param: if i.startswith('.'): filtrext.append(i.upper()) else: filtrext.append('.'+i.upper()) for f in self.ffic: ext=f[f.rfind('.'):] if (ext.upper() in filtrext) or filtrext=='*': templst.append(f) self.ffic=templst def filtredebut(self,*param): templst=[] sfiltre=[] for i in param: sfiltre.append(i.upper()) for f in self.ffic: for beg in sfiltre: if f.upper().startswith(beg): templst.append(f) self.ffic=templst def filtredatebasse(self,annee=2005,mois=1,jour=1,heure=0,minute=0,seconde=0): templst=[] dd=time.mktime((annee,mois,jour,heure,minute,seconde,0,0,1)) for f in self.ffic: dat=self.afic[f][0] if dat>=dd : templst.append(f) self.ffic=templst def filtredatehaute(self,annee=2005,mois=1,jour=1,heure=23,minute=59,seconde=59): templst=[] dd=time.mktime((annee,mois,jour,heure,minute,seconde,0,0,1)) for f in self.ffic: dat=self.afic[f][0] if dat<=dd : templst.append(f) self.ffic=templst def filtretaille(self,taibasse=0,taihaute=999999999999999): templst=[] #cf anti for f in self.ffic: tai=self.afic[f][1] if tai>=taibasse and tai<=taihaute: templst.append(f) self.ffic=templst def filtrenb(self,debut=None,fin=None): if debut==None: if fin!=None: self.ffic=self.ffic[:fin] else: if fin==None: self.ffic=self.ffic[debut:] else: self.ffic=self.ffic[debut:fin] def cmpnom(self,odest=None): """fichiers qui, dans odest : - n'existent pas """ if odest==None: odest=self.dest else: self.dest=odest templst=[] #cf anti for f in self.ffic: if not (f in odest.ffic) : templst.append(f) self.ffic=templst def cmpdt(self,odest=None): """fichiers qui, dans odest : - n'existent pas, - qui sont plus anciens (+ de 2 secondes), - dont la taille diffère """ if odest==None: odest=self.dest else: self.dest=odest templst=[] #cf anti for f in self.ffic: if not (f in odest.ffic) : templst.append(f) else: if ((self.afic[f][0]-odest.afic[f][0])>2) or (self.afic[f][1]!=odest.afic[f][1]) : templst.append(f) self.ffic=templst def cmpdiff(self,odest=None): """fichiers qui, dans odest : - n'existent pas, - qui sont plus anciens (+ de 2 secondes), - dont la taille diffère """ if odest==None: odest=self.dest else: self.dest=odest templst=[] #cf anti for f in self.ffic: if not (f in odest.ffic) : templst.append(f) else: if (abs(self.afic[f][0]-odest.afic[f][0])>2) or (self.afic[f][1]!=odest.afic[f][1]) : templst.append(f) self.ffic=templst def visu(self): print "disk",self.disk print "path",self.path print "dirbase",self.dirbase print #for i in self.ffic: # print i, #print #print for f in self.ffic: print f,' \t',time.strftime("%d.%m.%y %H:%M:%S",time.gmtime(self.afic[f][0])),' \t',self.afic[f][1] def visusimple(self): print for i in self.ffic: print i print def copie(self,repdest=None): if odest==None: repdest=self.dest else: self.dest=repdest rdest=repdest if (rdest[-1]!='\\'): rdest+='\\' for f in self.ffic: print 'Copie ',f, shutil.copyfile(self.disk+self.path+self.dirbase+'\\'+f,rdest+f) shutil.copystat(self.disk+self.path+self.dirbase+'\\'+f,rdest+f) print ' Ok.' def azip(self,nomfichierzip=None): import zipmci if nomfichierzip==None: nomfichierzip=self.dirbase+'.zip' os.chdir(self.disk+self.path+self.dirbase) if os.path.isfile(self.disk+self.path+self.dirbase+'\\'+nomfichierzip): os.remove(self.disk+self.path+self.dirbase+'\\'+nomfichierzip) zipmci.zipappend(nomfichierzip,[''],self.ffic) def uzip(self,nomfichierzip=None): import zipmci if nomfichierzip==None: nomfichierzip=self.dirbase+'.zip' os.chdir(self.disk+self.path+self.dirbase) zipmci.zipupdate(nomfichierzip,[''],self.ffic) def trinom(self): self.ffic.sort() def tridate(self): templst=[] for f in self.ffic: templst.append([self.afic[f][0],f]) templst.sort() self.ffic=[] for f in templst: #print f self.ffic.append(f[1]) def tritaille(self): templst=[] for f in self.ffic: templst.append([self.afic[f][1],f]) templst.sort() self.ffic=[] for f in templst: #print f self.ffic.append(f[1]) if __name__=='__main__': print oe=orep('Org','C:','\\Test') #oe.filtre() oe.filtreext('txt','ttt') #oe.filtretaille(10000,60000) #oe.filtredatebasse(2001, 4, 5) #oe.filtredatehaute(2001, 8, 23) #oe.tridate() #oe.tritaille() #oe.trinom() # # ==> # 0-----1-----2-----3-----4-----5 # | A | B | C | D | E | # +-----+-----+-----+-----+-----+ # -5 -4 -3 -2 -1 # <== # # 1 : 3 -> BC # 1 : -> BCDE # 1 : None -> BCDE # : 3 -> ABC # None: 3 -> ABC # -2: -> DE # 1 :-2 -> BC # :-2 -> ABC # -3:-1 -> CD # -4: 4 -> BCD # #oe.filtrenb(2,5) #du 2e au 5e #oe.filtrenb(3,None) #du 3e au dernier #oe.filtrenb(-3,None) #les 3 derniers #oe.filtrenb(None,4) #les 4 premiers oe.filtredebut('a','bb') ob=orep('Dest','C:','\\Test') ob.filtreext('txt','ttt') #oe.cmpnom(ob) #oe.cmpdt(ob) #oe.cmpdiff(ob) #oe.azip("toto.zip") oe.uzip("toto.zip") oe.visu() #oe.copie(r'C:\Test\Dest')