2010-09-21 17 views
7

Tengo el siguiente código de Python para eliminar archivos en un directorio. Por algún motivo, mis directorios .svn no se reconocen como directorios.Python no reconoce directorios os.path.isdir()

y me da el siguiente resultado:

no Svn sería apreciado un dir

Cualquier idea.

def rmfiles(path, pattern): 
    pattern = re.compile(pattern) 
    for each in os.listdir(path): 
     if os.path.isdir(each) != True: 
      print(each + " not a dir") 
      if pattern.search(each): 
       name = os.path.join(path, each) 
       os.remove(name) 

Respuesta

27

lo necesario para crear el nombre de ruta completo antes de comprobar:

if not os.path.isdir(os.path.join(path, each)): 
    ... 
+0

Pasé un tiempo sobre este problema y resulta que necesitaba usar os.path.join(). Gracias por el consejo. –

1

Tendrá que os.path.join el camino se invoca en listdir con el archivo/directorio encontrado, es decir

for each in os.listdir(path): 
    if os.path.isdir(os.path.join(path, each)): 
     .... 

Si no crea una ruta absoluta de esta manera, se probará en su lugar contra su directorio de trabajo actual, que probablemente no tenga el directorio svn.

Además, no compare explícitamente los valores booleanos. Deje si lo maneja como una expresión booleana (algunas funciones pueden devolver valores de verdad no verdaderos/falsos, es decir, ninguna o una instancia)

+0

Hay un método llamado abspath en ospath, y sin embargo, esto tampoco funciona para mí. ¿Sabes por qué esto no funcionaría? – vargonian

0

También podría cambiar al directorio de destino en lugar de construir una ruta absoluta.

def rmfiles(path, pattern): 
    pattern = re.compile(pattern) 
    oldpath = os.getcwd()  # <-- 
    os.chdir(path)   # <-- 
    try: 
     for each in os.listdir('.'): 
     if os.path.isdir(each) != True: 
      print(each + " not a dir") 
      if pattern.search(each): 
       name = os.path.join(path, each) 
       os.remove(name) 
    finally: 
     os.chdir(oldpath)  # <--