web-dev-qa-db-fra.com

Trouver des répertoires vides en Python

Tout,

Quel est le meilleur moyen de vérifier s'il y a des données dans un répertoire avant de le supprimer? Je suis en train de parcourir quelques pages pour trouver des images à l’aide de wget et bien sûr, chaque page ne comporte pas d’image, mais le répertoire est toujours créé. 

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)

Je voudrais tester pour voir si un fichier a été déposé dans le répertoire après sa création. Si rien n'est là ... supprimez-le.

Merci, Adam

39
aeupinhere
import os

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

LBYL style.
pour EAFP , voir la réponse de mouad.

55
Corey Goldberg

Je vais aller avec EAFP like so:

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

os.rmdir ne supprimera pas un répertoire qui n'est pas vide.

44
mouad

Essayer:

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

ou

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

Cela peut maintenant être fait plus efficacement dans Python3.5 + , puisqu'il n'est pas nécessaire de créer une liste du contenu du répertoire pour voir si son contenu est vide:

import os

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

Que faire si vous avez vérifié si le répertoire existe et s'il y a du contenu dans le répertoire ... quelque chose comme

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

Si les répertoires vides sont déjà créés, vous pouvez placer ce script dans votre répertoire externe et l'exécuter:

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 __== '__main__':
    outer_dir = os.path.dirname(__file__)
    run(outer_dir)
    os.system('pause')
1
Jakob

Voici le moyen le plus rapide et optimisé de vérifier si le répertoire est vide ou non.

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 ;

Les autres réponses mentionnées ici sont pas rapide parce que, si vous voulez utiliser la fonction os.listdir() habituelle, si le répertoire contient trop de fichiers, il ralentira ur le code et si vous utilisez la méthode os.rmdir( ) pour essayer de détecter l'erreur, alors il va simplement supprimer ce dossier. Ce n'est peut-être pas quelque chose que vous voulez faire si vous voulez juste vérifier si vous êtes vide. 

0
Natesh bhat