2015-03-23 15 views
7

Come posso ottenere i nomi delle cartelle esistenti in una directory usando Python?Nome cartella Python nella directory

Voglio salvare tutte le sottocartelle in una lista per lavorare con i nomi successivi ma non so come leggere i nomi delle sottocartelle?

Grazie per l'aiuto

risposta

10

È possibile utilizzare os.walk()

# !/usr/bin/python 

import os 

directory_list = list() 
for root, dirs, files in os.walk("/path/to/your/dir", topdown=False): 
    for name in dirs: 
     directory_list.append(os.path.join(root, name)) 

print directory_list 

EDIT

Se si desidera solo il primo livello e non in realtà "passeggiata" attraverso le sottodirectory, è ancora meno codice:

import os 

root, dirs, files = os.walk("/path/to/your/dir").next() 
print dirs 

Questo non è esattamente ciò per cui è stato creato os.walk. Se davvero si vuole un solo livello di sottodirectory, è anche possibile utilizzare os.listdir() come Yannik Ammann suggerito:

root='/path/to/my/dir' 
dirlist = [ item for item in os.listdir(root) if os.path.isdir(os.path.join(root, item)) ] 
print dirlist 
+0

grazie. Ma questo codice elenca solo i nomi, tuttavia non posso salvarli in un array o in un elenco? – HightronicDesign

+0

Certo che puoi ... Ho modificato la mia risposta, quindi aggiunge le voci a una lista. –

+0

ahh caratteristica davvero interessante, c'è ancora un problema, sto sempre tutto l'albero completo di tutte le sottodirectory nel percorso, ho solo bisogno della prima struttura: C: \ MyPath e in questa cartella ho folder1, folder2, folder3 .... e ho solo bisogno dei nomi di folder1, folder2 etc e non delle sottocartelle della cartella1 ..... – HightronicDesign

2

È possibile utilizzare os.listdir()here a link to the docs

Attenzione ritorna file e directory

esempio:

import os 

path = 'pyth/to/dir/' 
dir_list = os.listdir(path) 

aggiornamento: è necessario controllare se i nomi restituiti sono directory o file

import os 

path = 'pyth/to/dir/' 
# list of all content in a directory, filtered so only directories are returned 
dir_list = [directory for directory in os.listdir(path) if os.path.isdir(path+directory)] 
+0

'os.listdir()' elenca anche i file, non solo le directory. –

+0

lo fa? perché dovrebbe essere chiamato listdir se restituisce i file ?? – yamm

+0

Perché elenca il contenuto di una directory :) –

1

Utilizzare os.walk(path)

import os 

path = 'C:\\' 

for root, directories, files in os.walk(path): 
    for directory in directories: 
     print os.path.join(root, directory) 
+0

per favore come io sono in grado di stampare solo 2 livelli verso il basso (directory sotto) delle directory ... – Ossama

+0

import os path = 'C: \\' per root, directory, file in os.walk (percorso): se root.replace (percorso, '') .count (os.sep) <= 2: radice di stampa – srekcahrai

3

A partire da Python 3.4, è anche possibile utilizzare il nuovo modulo pathlib:

from pathlib import Path 

p = Path('some/folder') 
subdirectories = [x for x in p.iterdir() if x.is_dir()] 

print(subdirectories) 
3

È necessario innanzitutto importare os.

import os 
files=[] 
files = [f for f in sorted(os.listdir(FileDirectoryPath))] 

Questo darebbe lista con tutti i file nella FileDirectoryPath ordinato.

Problemi correlati