Подтвердить что ты не робот

Поиск пустых каталогов в Python

Все,

Каков наилучший способ проверить, есть ли данные в каталоге перед удалением? Я просматриваю пару страниц, чтобы найти некоторые фотографии с помощью 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)

Я бы хотел проверить, был ли файл удален в каталог после его создания. Если ничего нет... удалите его.

Спасибо, Адам

4b9b3361

Ответ 1

import os

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

LBYL.
для EAFP, см. ответ mouad.

Ответ 2

Я пойду с EAFP так:

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

os.rmdir не удалит каталог, который не является пустым.

Ответ 3

Try:

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

или

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

Ответ 4

Теперь это можно сделать более эффективно в Python3, поскольку нет необходимости создавать список содержимого каталога, чтобы увидеть, является ли его пустым:

import os

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

Ответ 5

Что делать, если вы проверили, существует ли каталог, и есть ли содержимое в каталоге... что-то вроде:

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

Ответ 6

Если пустые каталоги уже созданы, вы можете поместить этот 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')

Ответ 7

Вот самый быстрый и оптимизированный способ проверить, является ли каталог пустым или нет.

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( ) чтобы попытаться перехватить ошибка, то он просто удалит эту папку. Это может быть не то, что вы хотите сделать, если вы просто хотите проверить на пустоту.

Ответ 8

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