#python
#python
Вопрос:
я использую этот код для получения всех файлов в заданной папке. Есть ли способ получить только папки?
a = os.listdir('Tools')
Ответ №1:
import os.path
dirs = [d for d in os.listdir('Tools') if os.path.isdir(os.path.join('Tools', d))]
Комментарии:
1. Или
next(os.walk('Tools'))[1]
.2. -Ned почему, когда я пытаюсь использовать dirs = [d для d в os.listdir(‘Tools’), если os.path.isdir(d)] в python IDLE, я получаю только [‘Script’] ? В моем каталоге есть это [‘asunyan.gif ‘, ‘i18n’, ‘pynche’, ‘Scripts’, ‘versioncheck’, ‘webchecker’] спасибо 🙂
Ответ №2:
Для печати только папок
print os.walk(DIR_PATH).next()[1]
Для печати только файлов
print os.walk(DIR_PATH).next()[2]
Комментарии:
1. Я получаю AttributeError: объект ‘generator’ не имеет атрибута ‘next’
2. Работает идеально для меня. (Python 2.7, Ubuntu 16, Anaconda env)
3. Python 3 (для папок): print(next(os.walk(DIR_PATH))[1])
Ответ №3:
Другой метод:
dirs = [entry.path for entry in os.scandir('Tools') if entry.is_dir()]
Ответ №4:
Используйте os.walk(DIR_PATH).next()[1]
. Примечание os.walk(DIR_PATH).next()
генерирует кортеж длиной 3, где
os.walk(DIR_PATH).next()[0]
является лиDIR_PATH
os.walk(DIR_PATH).next()[1]
является ли список всех папок вDIR_PATH
os.walk(DIR_PATH).next()[2]
является ли список всех файлов вDIR_PATH
Ответ №5:
import os
def ld(val):
return next(os.walk(val))[1] # Thank you @eryksun
for fold in ld('/'):
print(fold)
Ответ №6:
Простой пример в python 3 для разделения файлов и папок.
from os.path import isdir, isfile
from os import listdir
path = "./"
# get only folders
folders = list(filter(lambda x: isdir(f"{path}\{x}"), listdir(path)))
# get only files
files = list(filter(lambda x: isfile(f"{path}\{x}"), listdir(path)))