2009-03-01 4 views
7

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

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

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

Спасибо.

ответ

16

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

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

Спасибо за быстрый ответ! Я проверил справку (os.path) и выяснил, что, возможно, isfile (путь) тоже будет полезен. isdir (s) Возвращает true, если путь относится к существующему каталогу. isfile (путь) Проверьте, является ли путь обычным файлом – 2009-03-01 08:20:24

+0

Не забудьте проверить, является ли файл мягкой ссылкой: islink и ismount, если файл является точкой монтирования для устройства. –

+4

Хедует, что 'listdir()' не возвращает файлы и каталоги данного пути (''/ path'' в примере) с абсолютными путями, а просто имя файла. И я думаю, что 'isdir()'/'isfile()' etc проверяет относительно текущего рабочего каталога, поэтому 'filter()' может не работать, если вы не вернете возвращаемые значения 'listdir' в пути. – Parham

2

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

Примечание это не будет работать, если '/ путь' является текущий рабочий каталог. 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) 
+0

Я сделал это так. реж = os.listdir (реж) я = Len (реж) -1 в то время как я> -1: , если os.path.isfile (odir + '\\' + реж [I]): дель реж [i] i = i-1 где dir - это каталог, определяемый пользователем. Работает отлично. – 2009-03-01 11:36:27

+0

Забыл упомянуть: odir = dir # 'odir' означает 'original directory' Так что 'odir' содержит пользовательскую директорию, после изменения 'dir' в список. Постскриптум Есть ли способ редактировать комментарии? O_o – 2009-03-01 11:41:12

+0

Вы удаляете их и повторно публикуете, делая вид, что ничего не произошло :-) – bobince

7

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

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

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

+0

Согласен!Я тоже попробую, спасибо. – 2009-03-01 11:38:00

+1

Удивительный, очень хороший метод – Serg

Смежные вопросы