Перечислите каталоги и получите название каталога - PullRequest
34 голосов
/ 22 апреля 2010

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

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

Ответы [ 4 ]

48 голосов
/ 22 апреля 2010

При этом будут напечатаны все подкаталоги текущего каталога:

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, как предлагали другие.

19 голосов
/ 22 апреля 2010
import os
for root, dirs, files in os.walk(top, topdown=False):
    for name in dirs:
        print os.path.join(root, name)

Walk - хорошая встроенная программа для того, что вы делаете

6 голосов
/ 22 апреля 2010

Вы, кажется, используете python, как будто это оболочка. Всякий раз, когда мне нужно было сделать что-то вроде того, что вы делаете, я использовал os.walk ()

Например, как объяснено здесь : [x [0] для x в os.walk (каталог)]

2 голосов
/ 22 апреля 2010

Перечисление записей в текущем каталоге (for directories in os.listdir(os.getcwd()):) и последующая интерпретация этих записей как подкаталогов совершенно другого каталога (dir = os.path.join('/home/user/workspace', directories)) - это одна вещь, которая выглядит подозрительно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...