Comment vérifier si un dossier contient des fichiers en utilisant python 3

j'ai cherché partout cette réponse mais je ne la trouve pas.

j'essaye de trouver un script qui va chercher un sous-dossier particulier puis vérifier s'il contient des fichiers et, si c'est le cas, écrire le chemin du dossier. J'ai trouvé la partie recherche de sous-dossiers, mais la recherche de dossiers me dérange.

j'ai trouvé plusieurs suggestions sur la façon de vérifier si un dossier est vide, et j'ai essayé de modifier les scripts pour vérifier si le dossier est pas vide, mais je n'obtiens pas les bons résultats.

voici le script le plus proche:

for dirpath, dirnames, files in os.walk('.'):
if os.listdir(dirpath)==[]:
    print(dirpath)

ceci listera tous les sous-dossiers qui sont vides, mais si j'essaye de le changer en:

if os.listdir(dirpath)!=[]:
    print(dirpath)

il va tout énumérer--pas seulement ces sous-dossiers contenant des fichiers.

j'apprécierais vraiment que quelqu'un puisse m'indiquer la bonne direction.

Ceci est pour Python 3.4, si cela compte.

Merci pour tout l'aide que vous pouvez me donner.

23
demandé sur Heather 2014-09-05 01:36:53

4 réponses

'files' vous dit déjà ce qui se trouve dans le répertoire. Il suffit de la cocher:

for dirpath, dirnames, files in os.walk('.'):
    if files:
        print(dirpath, 'has files')
    if not files:
        print(dirpath, 'is empty')
19
répondu tdelaney 2016-11-23 13:49:55

Vous pouvez faire usage de la nouvelle pathlib bibliothèque introduite en Python 3.4 pour extraire tous les sous-répertoires non vides de façon récursive, par exemple:

import pathlib

root = pathlib.Path('some/path/here')
non_empty_dirs = {str(p.parent) for p in root.rglob('*') if p.is_file()}

puisque vous devez quand même parcourir l'arborescence, nous construisons un ensemble des répertoires parents où un fichier est présent, ce qui donne un ensemble de répertoires contenant des fichiers - alors faites ce que vous voulez avec le résultat.

9
répondu Jon Clements 2014-09-04 22:00:32
entities = os.listdir(dirpath)
for entity in entities:
    if os.path.isfile(entity):
        print(dirpath)
        break
3
répondu ventsyv 2014-09-04 21:41:54

Si vous pouvez supprimer le dossier, vous pouvez utiliser ceci:

try:
    os.rmdir( submodule_absolute_path )
    is_empty = True

except OSError:
    is_empty = False

if is_empty:
    pass

os.rmdir ne supprime un dossier que s'il est vide, sinon il jette L'exception OSError.

Vous pouvez trouver une discussion à ce sujet sur:

  1. https://bytes.com/topic/python/answers/157394-how-determine-if-folder-empty

par exemple, supprimer un dossier vide est très bien quand vous planifiez de faire un clone git, mais vous êtes vérifier à l'avance si le dossier est vide afin que git ne jette pas l'erreur de dossier non vide.

2
répondu user 2017-10-03 23:42:59