J'ai cherché partout cette réponse mais je ne la trouve pas.
J'essaie de trouver un script qui recherchera un sous-dossier particulier puis vérifiera s'il contient des fichiers et, si oui, écrit le chemin du dossier. J'ai compris la partie de recherche de sous-dossier, mais la vérification des fichiers me bloque.
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 n'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)
Cela listera tous les sous-dossiers qui sont vides, mais si j'essaye de le changer en:
if os.listdir(dirpath)!=[]:
print(dirpath)
il répertorie tout - pas seulement les sous-dossiers contenant des fichiers.
J'apprécierais vraiment que quelqu'un puisse m'orienter dans la bonne direction.
C'est pour Python 3.4, si cela importe.
Merci pour toute l'aide que tu peux m'apporter.
"fichiers" vous indique déjà ce qui se trouve dans le répertoire. Il suffit de le vérifier:
for dirpath, dirnames, files in os.walk('.'):
if files:
print(dirpath, 'has files')
if not files:
print(dirpath, 'is empty')
Vous pouvez utiliser la nouvelle bibliothèque pathlib
introduite dans Python 3.4 pour extraire récursivement tous les sous-répertoires non vides, 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 de toute façon parcourir l'arborescence, nous construisons un ensemble de répertoires parents où un fichier est présent, ce qui donne un ensemble de répertoires contenant des fichiers - puis faites ce que vous voulez avec le résultat.
Si vous pouvez supprimer le répertoire, 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 répertoire que s'il est vide, sinon il lève l'exception OSError.
Vous pouvez trouver une discussion à ce sujet sur:
Par exemple, la suppression d'un répertoire vide est très bien lorsque vous prévoyez de faire un clone git, mais pas si vous vérifiez au préalable si le répertoire est vide, de sorte que votre programme ne génère pas d'erreur de répertoire vide.
entities = os.listdir(dirpath)
for entity in entities:
if os.path.isfile(entity):
print(dirpath)
break
En ajoutant à la réponse pathlib de @Jon Clements, je voulais vérifier si le dossier est vide avec pathlib mais sans créer un ensemble:
from pathlib import Path
is_empty = not bool(sorted(Path('some/path/here').rglob('*')))
sorted (Path (path_here) .rglob ('*')) renvoie une liste d'éléments PosixPah triés. S'il n'y a aucun élément, il renvoie une liste vide, qui est False. Donc is_empty sera True si le chemin est vide et false si le chemin a quelque chose
Des résultats d'idées similaires {} et [] donnent la même chose:
Vous pouvez utiliser ce code simple:
dir_contents = [x for x in os.listdir('.') if not x.startswith('.')]
if len(dir_contents) > 0:
print("Directory contains files")
Il vérifie les fichiers et répertoires dans le répertoire de travail actuel (.
). Vous pouvez modifier .
Dans os.listdir()
pour vérifier tout autre répertoire.