Есть ли способ получить все каталоги, но не файлы в каталоге в Python?

1

Этот ссылка использует пользовательский метод, но я просто хочу посмотреть, есть ли в Python 2.6 один метод?

Теги:
directory

4 ответа

5
Лучший ответ

Нет встроенной функции для отображения только файлов, но достаточно легко определить в нескольких строках:

def listfiles(directory):
    return [f for f in os.listdir(directory) 
              if os.path.isdir(os.path.join(directory, f))]

EDIT: исправлено, спасибо Stephan202

  • 0
    Вы имеете в виду os.path.isdir (os.path.join (directory, f)) вместо os.path.isfile (f) ...
  • 0
    Вопрос заключался в том, чтобы найти только каталоги, а не только файлы (что, как мне кажется, довольно странно)
3

Если a_directory - это каталог, который вы хотите проверить, то:

next(f1 for f in os.walk(a_directory))

Из os.walk() ссылка:

Создайте имена файлов в дереве каталогов, пробираясь по дереву сверху вниз или снизу вверх. Для каждого каталога в дереве, укорененном в верхней части каталога (включая верхний), он дает 3-кортеж (dirpath, dirnames, filenames).

  • 0
    +1: Хотя, вы можете захотеть сломаться и не рекурсивно спускаться в подкаталоги. Лично я предпочел бы явно вызывать os.listdir и os.isdir.
  • 0
    Если поменял код. это не повторится ...
1

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

0
def listdirs(path):
    ret = []
    for cur_name in os.listdir(path):
        full_path = os.path.join(path, cur_name)
        if os.path.isdir(full_path):
            ret.append(cur_name)
    return ret

onlydirs = listdir("/tmp/")
print onlydirs

.. или как понимание списка.

path = "/tmp/"
onlydirs = [x for x in os.listdir(path) if os.path.isdir(os.path.join(path, x))]
print onlydirs

Ещё вопросы

Сообщество Overcoder
Наверх
Меню