[eside-ghost] reinventando la rueda en python

altern altern2 en gmail.com
Jue Sep 7 18:39:17 CEST 2006


Alfredo Beaumont escribió:
> Osteguna 07 Iraila 2006 13:58(e)an, altern(e)k idatzi zuen:
>> aupa
>>
>> supongo que estoy reinventando la rueda, a ver si alguno me ayuda.
>> Necesito copiar un directorio con archivos y subdirectorios desde python
>> pero tengo que filtrar unos directorios y archivos con determinadas
>> extensiones.
>>
>> En principio me servia copiarlo todo a lo bestia con
>> shutil.copytree(origen, destino)
>>
>> pero como el directorio tiene un monton de historias que no me interesan
>> y que suman 13 megas pues me he puesto a la obra. He mirado en internet
>> a ver si alguien se habia currado una funcion para hacer algo parecido
>> (estoy seguro de que si) pero no he encontrado nada. He llegado hasta aqui:
>>
>> import os
>>
>> def recursiveCopy(src, to, folBlackList, extBlackList):
>> 	# exclude: Demo, doc, Tk, WGL, scripts, *.pyo, *.pyc
>>          for i in os.listdir(src) :
>>              if os.path.isfile(i) : # files
>> 		# aqui checkear si la extension esta en la extBlackList
>>                  shutil.copy(os.path.join(src,i), to) # file, folder
>>              elif os.path.isdir(i) :
>> 		# aqui checkear si esta en la folBlackList
>>                  newsrc = os.path.join(src, i) # going one level down
>>                  newto = os.path.join(to, i)
>>                  os.mkdir(newto) # create if didnt exist
>>                  recursivecopy(newsrc, newto, folBlackList, extBlackList
>>
>>
>> recursiveCopy(/blah/blah/OpenGL, /tralara/dist,  ['Demo', 'doc', 'Tk',
>> 'WGL', 'scripts'], ['.pyo', '.pyc'])
>>
>>
>> No me chuta bien y ya se me han fundido un par de plomos en la olla en
>> el proceso con tanta recursion, igual alguno habeis hecho algo similar
>> alguna vez ?
> 
> ¿ Podrías indicar que fallo te da ?
> 
> Así a bote pronto veo algunos:
> 
> * recursiveCopy no tiene el paréntesis de cierre en la llamada recursiva
> * los dos primeros parámetros de recursiveCopy tienen que ir entrecomillados
> * al hacer el chequeo de fichero o directorio te estás olvidando del path: 
> os.path.isfile(os.path.join(src,i), y demás

los dos primeros son errores del email, el segundo no!
ahora si funciona, solo falta hacer el filtro para escapar los de la 
lista negra.

gracias! ahi va por si a alguien le interesa

def recursiveCopy(src, to, folderBlackList, extBlackList):
     """ copies tree excluding blacklisted files and folders
     """yc
     if not os.path.isdir(to) : # if not there
         os.mkdir(to) # create root dir

     for i in os.listdir(src) : # root
         p = os.path.join(src, i) # get path to this item
         if os.path.isfile(p) : # files
## here check if not a blacklisted extension
             shutil.copy(p, to) # copy this file to current folder
         elif os.path.isdir(p) : # folders
## here check if not a blacklisted folder
             newto = os.path.join(to, i) # walk in
             if not os.path.isdir(newto) : # if not there
                 os.mkdir(newto) # create if didnt exist
             recursiveCopy(p, newto, folderBlackList, extBlackList)


> Saludos
> 
>> gracias
>>
>> enrike
>>
>> _______________________________________________
>> eside-ghost mailing list
>> eside-ghost en deusto.es
>> https://listas.deusto.es/mailman/listinfo/eside-ghost
> 



Más información sobre la lista de distribución eside-ghost