web-dev-qa-db-fra.com

Répertorier les répertoires et obtenir le nom du répertoire

J'essaie d'obtenir le code pour répertorier tous les répertoires d'un dossier, changer de répertoire dans ce dossier et obtenir le nom du dossier actuel. Le code que j'ai jusqu'à présent est ci-dessous et ne fonctionne pas pour le moment. Il semble que j'obtienne le nom du dossier parent.

import os

for directories in os.listdir(os.getcwd()): 
    dir = os.path.join('/home/user/workspace', directories)
    os.chdir(dir)
    current = os.path.dirname(dir)
    new = str(current).split("-")[0]
    print new

J'ai également d'autres fichiers dans le dossier mais je ne veux pas les lister. J'ai essayé le code ci-dessous mais je ne l'ai pas encore fait fonctionner non plus.

for directories in os.path.isdir(os.listdir(os.getcwd())): 

Quelqu'un peut-il voir où je me trompe?

Merci

Je l'ai fait fonctionner mais cela semble un peu rond.

import os
os.chdir('/home/user/workspace')
all_subdirs = [d for d in os.listdir('.') if os.path.isdir(d)]
for dirs in all_subdirs:
    dir = os.path.join('/home/user/workspace', dirs)
    os.chdir(dir)
    current = os.getcwd()
    new = str(current).split("/")[4]
    print new
37
chrissygormley

Cela affichera tous les sous-répertoires du répertoire courant:

print [name for name in os.listdir(".") if os.path.isdir(name)]

Je ne sais pas ce que vous faites avec split("-"), mais peut-être que ce code vous aidera à trouver une solution?

Si vous voulez les chemins d'accès complets des répertoires, utilisez abspath:

print [os.path.abspath(name) for name in os.listdir(".") if os.path.isdir(name)]

Notez que ces morceaux de code n'obtiendront que les sous-répertoires immédiats. Si vous voulez des sous-sous-répertoires et ainsi de suite, vous devez utiliser walk comme d'autres l'ont suggéré.

51
RichieHindle
import os
for root, dirs, files in os.walk(top, topdown=False):
    for name in dirs:
        print os.path.join(root, name)

La marche est un bon outil intégré pour ce que vous faites

20
corn3lius

Vous semblez utiliser python comme s'il s'agissait du Shell. Chaque fois que j'ai eu besoin de faire quelque chose comme ce que vous faites, j'ai utilisé os.walk ()

Par exemple, comme expliqué ici : [x [0] pour x dans os.walk (répertoire)]

7
meatvest

Répertorier les entrées du répertoire en cours (for directories in os.listdir(os.getcwd()):), puis interpréter ces entrées comme des sous-répertoires d'un répertoire entièrement différent (dir = os.path.join('/home/user/workspace', directories)) est une chose qui semble louche.

2
ndim