[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