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.
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')
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.
entities = os.listdir(dirpath)
for entity in entities:
if os.path.isfile(entity):
print(dirpath)
break
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:
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.