Encontrar directorios vacíos en Python

Todos,

¿Cuál es la mejor manera de verificar si hay datos en un directorio antes de eliminarlos? Estoy navegando por un par de páginas para encontrar algunas fotos usando wget y, por supuesto, todas las páginas no tienen una imagen, pero el directorio aún está creado.

dir = 'Files\\%s' % (directory) os.mkdir(dir) cmd = 'wget -r -l1 -nd -np -A.jpg,.png,.gif -P %s %s' %(dir, i[1]) os.system(cmd) if not os.path.isdir(dir): os.rmdir(dir) 

Me gustaría probar para ver si un archivo se colocó en el directorio después de haber sido creado. Si no hay nada … bórralo.

Gracias adan

 import os if not os.listdir(dir): os.rmdir(dir) 

Estilo LBYL .
para EAFP , vea la respuesta de mouad.

Iré con EAFP así:

 try: os.rmdir(dir) except OSError as ex: if ex.errno == errno.ENOTEMPTY: print "directory not empty" 

os.rmdir no eliminará un directorio que no esté vacío.

Tratar:

 if not os.listdir(dir): print "Empty" 

o

 if os.listdir(dir) == []: print "Empty" 

Ahora se puede hacer de manera más eficiente en Python3.5 + , ya que no es necesario crear una lista de los contenidos del directorio para ver si está vacío:

 import os def is_dir_empty(path): return next(os.scandir(path), None) is None 

¿Qué pasaría si comprobó si el directorio existe y si hay contenido en el directorio … algo así como:

 if os.path.isdir(dir) and len(os.listdir(dir)) == 0: os.rmdir(dir) 

Si los directorios vacíos ya están creados, puede colocar este script en su directorio externo y ejecutarlo:

 import os def _visit(arg, dirname, names): if not names: print 'Remove %s' % dirname os.rmdir(dirname) def run(outer_dir): os.path.walk(outer_dir, _visit, 0) if __name__ == '__main__': outer_dir = os.path.dirname(__file__) run(outer_dir) os.system('pause') 

Esta es la forma más rápida y optimizada de verificar si el directorio está vacío o no.

 empty = False for dirpath, dirnames, files in os.walk(dir): if files: print("Not empty !") ; if not files: print("It is empty !" ) empty = True break ; 

Las otras respuestas que se mencionan aquí no son rápidas porque, si desea usar el os.listdir() habitual, si el directorio tiene demasiados archivos, ralentizará su código y si usa el método os.rmdir( ) para intentar capturar el error, entonces simplemente eliminará esa carpeta. Esto podría no ser algo que quieras hacer si solo quieres comprobar si hay vacíos.

 import os import tempfile root = tempfile.gettempdir() EMPTYDIRS = [] for path, subdirs, files in os.walk(r'' + root ): if len( files ) == 0 and len( subdirs ) == 0: EMPTYDIRS.append( path ) for e in EMPTYDIRS: print e