Ответ 1
import os
if not os.listdir(dir):
os.rmdir(dir)
Все,
Каков наилучший способ проверить, есть ли данные в каталоге перед удалением? Я просматриваю пару страниц, чтобы найти некоторые фотографии с помощью wget, и, конечно, каждая страница не имеет изображения на ней, но каталог все еще создан.
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)
Я бы хотел проверить, был ли файл удален в каталог после его создания. Если ничего нет... удалите его.
Спасибо, Адам
import os
if not os.listdir(dir):
os.rmdir(dir)
Я пойду с EAFP так:
try:
os.rmdir(dir)
except OSError as ex:
if ex.errno == errno.ENOTEMPTY:
print "directory not empty"
os.rmdir не удалит каталог, который не является пустым.
Try:
if not os.listdir(dir):
print "Empty"
или
if os.listdir(dir) == []:
print "Empty"
Теперь это можно сделать более эффективно в Python3, поскольку нет необходимости создавать список содержимого каталога, чтобы увидеть, является ли его пустым:
import os
def is_dir_empty(path):
return next(os.scandir(path), None) is None
Что делать, если вы проверили, существует ли каталог, и есть ли содержимое в каталоге... что-то вроде:
if os.path.isdir(dir) and len(os.listdir(dir)) == 0:
os.rmdir(dir)
Если пустые каталоги уже созданы, вы можете поместить этот script в свой внешний каталог и запустить его:
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')
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 ;
Другие упомянутые здесь ответы не являются быстрыми, потому что, если вы хотите использовать обычный
os.listdir()
, если в каталоге слишком много файлов, это замедлит ваш код и если вы используете методos.rmdir( )
чтобы попытаться перехватить ошибка, то он просто удалит эту папку. Это может быть не то, что вы хотите сделать, если вы просто хотите проверить на пустоту.
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