Список каталогов и получить имя каталога
Я пытаюсь заставить код перечислить все каталоги в папке, сменить каталог в эту папку и получить имя текущей папки. Код, который у меня есть, ниже и не работает в данный момент. Кажется, я получаю имя родительской папки.
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
У меня также есть другие файлы в папке, но я не хочу их перечислять. Я пробовал приведенный ниже код, но у меня еще нет его работы.
for directories in os.path.isdir(os.listdir(os.getcwd())):
Кто-нибудь может увидеть, где я ошибаюсь?
Спасибо
Похоже, что он работает, но кажется немного крутым.
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
Ответы
Ответ 1
Здесь будут напечатаны все подкаталоги текущего каталога:
print [name for name in os.listdir(".") if os.path.isdir(name)]
Я не уверен, что вы делаете с split("-")
, но, возможно, этот код поможет вам найти решение?
Если вам нужны полные пути к каталогам, используйте abspath
:
print [os.path.abspath(name) for name in os.listdir(".") if os.path.isdir(name)]
Обратите внимание, что эти фрагменты кода получат только непосредственные подкаталоги. Если вам нужны суб-подкаталоги и т.д., Вы должны использовать walk
, как предложили другие.
Ответ 2
import os
for root, dirs, files in os.walk(top, topdown=False):
for name in dirs:
print os.path.join(root, name)
Прогулка - хорошая встроенная функция для того, что вы делаете.
Ответ 3
Кажется, вы используете python, как если бы это была оболочка. Всякий раз, когда мне нужно было делать что-то вроде того, что вы делаете, я использовал os.walk()
Например, как описано здесь: [x [0] для x в os.walk(каталог)]
Ответ 4
Перечисление записей в текущем каталоге (for directories in os.listdir(os.getcwd()):
), а затем интерпретация этих записей как подкаталогов совершенно другого каталога (dir = os.path.join('/home/user/workspace', directories)
) - это одна вещь, которая выглядит подозрительной.