#python
Вопрос:
Я безуспешно пытаюсь получить функцию Python, которая в форме класса возвращает вложенную папку данной папки.
Моя папка набора данных структурирована следующим образом:
datasets Actor1, emotion1 emotion2 Actor2 emotion1 emotion2
# setting class class Folder: """Attempt to model typical folder.""" def __init__(self, path): self.path = path def get_folder(self): sep_ = os.path.sep files = glob.glob(sep_.join([self.path, "*"])) dir_list = list() for dir_ in files: if os.path.isdir(dir_) == True: dir_list.append(dir_) return dir_list
Моя проблема заключается в следующем:
Folder(path).get_folder()
возвращает список, содержащий только элемент в каталоге наборов данных
Out[8]: [..\datasets\Actor1', '..\datasets\Actor2']
Но мой требуемый результат таков:
['...\datasets\Actor1\emotion1', '...\datasets\Actor1\emotion2', '...\datasets\Actor2\emotion2', '...\datasets\Actor2\emotion2',]
Не могли бы вы помочь?
Комментарии:
1. Не знаю почему , но
test = os.listdir(Folder(path).get_folder())[0]
возвращаю первый элемент моей подпапки, но когда я звонюfor t in os.listdir(test): print(t)
, возвращается ошибкаTypeError: listdir: path should be string, bytes, os.PathLike or None, not list.
2. Ну, это еще одна проблема, но
test
это список, который вы не можете назватьos.list_dir(some_list)
Ответ №1:
Попробуй это:
import os import glob class Folder: """Attempt to model typical folder.""" def __init__(self, path): self.path = path def get_folder(self): files = glob.glob(os.path.join(self.path, "*")) dir_list = [] for f in files: if os.path.isdir(f): dir_list = dir_list [ os.path.join(self.path, elt) for elt in os.listdir(f) ] return dir_list print(Folder(".").get_folder())
Комментарии:
1. Спасибо @Be Chiller Тоже! Это возвращает только вложенные каталоги. т. Е.
['emotion1', 'emotion2', 'emotion1', 'emotion2']
Как я могу соединить их с помощью пути?2. os.path.join(папка, файл), я обновил свой ответ