2015-02-03 4 views
0

Приведенная ниже команда дает пустой [] при попытке установить путь в переменной dirPath. Однако он работает только тогда, когда я запускаю его в интерпретаторе python, перейдя в каталог, указанный dirPath. В чем проблема? Я хочу, чтобы эта строка выдавала правильный вывод из любого каталога.Список каталогов по определенному пути в Python

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

ответ

1

Если ваш текущий рабочий каталог (cwd) равен dirPath, ваш код не будет работать должным образом.

os.listdir(dirPath) возвращает список имен папок (НЕ пути!).

os.path.abspath(name) в основном возвращает "cwd\name"

Что вы хотите os.path.abspath(os.path.join(dirPath, name)), т.е. "dirPath\name".

Так, чтобы получить список путей вам нужно что-то вроде:

path_list = [path for path in (os.path.abspath(os.path.join(dirPath, name)) for name in os.listdir(dirPath)) if os.path.isdir(path)] 

(Имейте в виду, что я не совсем уверен, если это будет работать с Python 2.7, так как у меня только p3, чтобы проверить его атм .)

+0

Хорошо. Позвольте мне попробовать. – Zack

+0

Да ... Это работает .. Спасибо! Таким образом, это было поведение по умолчанию абсолютного пути по умолчанию. – Zack

+0

abspath преобразует любой относительный путь (имя папки - относительный путь) в абсолютный путь, объединив его с cwd (также он нормализует его, разрешая такие вещи, как «..»). – PeterE

0

Попробуйте этот код:

[x[0] for x in os.walk(directory)] 

в качестве альтернативы вы можете использовать

os.listdir(path) 

, а также.

+0

Я думаю, что прогулка будет делать рекурсивный список каталогов, которые я хочу, чтобы избежать – Zack

+0

Также он имеет такую ​​же проблему, как OP – PeterE

+0

редактирования списка «dirnames» остановят os.walk() из рекурсии в там. –

0

Я попробовал нижеследующее, и оно правильно отображает имя. Что-то не так с использованием абсолютного пути. Было бы здорово, если бы кто-то мог понять проблему с этим. На данный момент я собираюсь с именами каталогов и конкатенировать, чтобы получить полный абсолютный путь!

>>> for name in os.listdir("/home/clonedir"): 
...  print(name) 
... 
directory1 
directory2 
>>> 
Смежные вопросы