Проблемы в классе Python для извлечения вложенных папок

#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(папка, файл), я обновил свой ответ