303 votes

Lister les fichiers UNIQUEMENT dans le répertoire actuel

En Python, je veux seulement répertorier tous les fichiers dans le répertoire actuel UNIQUEMENT. Je ne veux pas les fichiers répertoriés depuis un sous-répertoire ou depuis le répertoire parent.

Il semble y avoir des solutions similaires disponibles, mais elles ne semblent pas fonctionner pour moi. Voici un extrait de mon code :

import os
for subdir, dirs, files in os.walk('./'):
    for file in files:
      faire quelque chose
      print fichier

Supposons que j'ai 2 fichiers, holygrail.py et Tim dans mon répertoire actuel. J'ai également un dossier qui contient deux fichiers - appelons-les Arthur et Lancelot - à l'intérieur. Lorsque j'exécute le script, voici ce que j'obtiens :

holygrail.py
Tim
Arthur
Lancelot

Je suis satisfait de holygrail.py et Tim. Mais les deux fichiers, Arthur et Lancelot, je ne veux pas qu'ils soient répertoriés.

7voto

2114L3 Points 196

Cela peut être fait avec os.walk()

testé avec python 3.5.2;

import os
for root, dirs, files in os.walk('.', topdown=True):
    dirs.clear() #avec topdown à true, cela empêchera walk d'aller dans les sous-dossiers
    for file in files:
      #faire quelques choses
      print(file)

si vous supprimez la ligne dirs.clear() , les fichiers des sous-dossiers seront inclus à nouveau.

mettez à jour avec des références ;

os.walk documenté ici et parle de la liste triple créée et des effets de topdown.

.clear() documenté ici pour vider une liste

donc en vidant la liste pertinente de os.walk, vous pouvez influencer son résultat selon vos besoins.

5voto

Ozgur Oz Points 372
import os
for subdir, dirs, files in os.walk('./'):
    for file in files:
      fais quelque chose
      print file

Vous pouvez améliorer ce code avec del dirs[:] qui ressemblera à ce qui suit.

import os
for subdir, dirs, files in os.walk('./'):
    del dirs[:]
    for file in files:
      fais quelque chose
      print file

Ou encore mieux si vous pouviez indiquer à os.walk le répertoire de travail actuel.

import os
cwd = os.getcwd()
for subdir, dirs, files in os.walk(cwd, topdown=True):
    del dirs[:]  # supprimer les sous-répertoires.
    for file in files:
      fais quelque chose
      print file

3voto

Inbar Rose Points 13033

Au lieu de os.walk, utilisez simplement os.listdir

1voto

Georg3.14159265 Points 36

En suivant Pygirl et Flimm, l'utilisation de pathlib, (une référence vraiment utile, au fait) leur solution incluait le chemin complet dans le résultat, voici donc une solution qui affiche seulement les noms de fichiers :

from pathlib import Path
p = Path(destination_dir) # destination_dir = './' dans le message original
files = [x.name for x in p.iterdir() if x.is_file()]
print(files)

0voto

Nir Points 139

Pour répertorier les fichiers dans un dossier spécifique en excluant les fichiers de ses sous-dossiers avec os.walk, utilisez :

_, _, file_list = next(os.walk(data_folder))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X