Как мне отличить файл от каталога в Python?

При использовании метода os.listdir мне нужно указать, какой элемент в результирующем списке является каталогом или просто файлом.

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

Есть ли способ просмотреть этот список и удалить из него все файлы? Если это невозможно сделать с помощью os.listdir, какой метод лучше использовать?

Спасибо.

Ответов (4)

Решение

Используйте os.path.isdir для фильтрации каталогов. Возможно что-то вроде

dirs = filter(os.path.isdir, os.listdir('/path'))
for dir in dirs:
    # add your file

Чтобы оценить дочерние элементы текущего каталога:

import os

# Creates a list with all children items
cd_children = os.listdir()

# Iterate through the list
for item in cd_children:

    # If item is a directory (folder) do...
    if os.path.isdir(item):
        print('{:<13}{:<21}'.format('folder', item))

    # If item is a file do ...
    elif os.path.isfile(item):
        print('{:<13}{:<21}'.format('file', item))

Пример вывода :

 folder          untitled folder      
 file            7972-orders.csv           
 file            8235-users.csv
 file            teads.py             
 file            table.csv

Используется os и os.path .

каталоги = фильтр (os.path.isdir, os.listdir ('/ путь'))

Обратите внимание, что это не сработает, если / path не является текущим рабочим каталогом. os.listdir () возвращает имена листов, поэтому вы будете спрашивать «os.path.isdir ('file.txt')», и если текущий каталог находится в другом месте, вы увидите неправильный файл 'file.txt'.

os.path.join () следует использовать в выводе os.listdir () для получения полного имени файла.

children= [os.path.join('/path', child) for child in os.listdir('/path')]
directories= filter(os.path.isdir, children)

Это может быть быстрее:

current, dirs, files = os.walk('/path').next()

Список каталогов будет в dirs переменной.