Получить список каталогов, которые соответствуют условию

#python #python-3.x #subdirectory #directory-structure

#python #python-3.x #подкаталог #структура каталогов

Вопрос:

Я пишу скрипт на Python, в котором перечислены каталоги в каталоге. Задача кажется простой.

Однако в моем случае я хотел бы сделать что-то более сложное. Скажем, у меня следующая структура

 ----folder1----conditionfolder----conditionfile
  |
  |---folder2----conditionfolder
  |
  |---folder3 
  

Пока скрипт просто перечисляет каталоги:

  • folder1
  • folder2
  • папка 3

Однако я хочу, чтобы в скрипте были перечислены только каталоги, соответствующие условию

Например, если я хочу перечислить каталоги, в которых есть подкаталог с именем «conditionfolder», я получу

  • folder1
  • folder2

с другой стороны, если я хочу перечислить каталоги, в которых есть подкаталог с именем «conditionfolder», а внутри него есть файл с именем «conditionfile», у меня будет

  • folder1

Как я могу это сделать на python?

Редактировать:

Следуя ответу @Susmit Agrawal, я сделал это:

 thelist=list(glob.glob('./*/conditionfolder/conditionfile'))
print(thelist)
  

Итак, теперь у меня есть список вида:

 ['.\folder1\conditionfolder\conditionfile']
  

и это здорово. Однако в идеале я хотел бы иметь это

 ['folder1']
  

имеется в виду только список папок.
Я предполагаю, что могу работать с исходным списком, чтобы сгенерировать другой путем разделения

Ответ №1:

Если условия могут быть описаны в командной строке в виде регулярного выражения, самым простым способом было бы использовать glob :

 import glob

for path in glob.glob('./*/conditionfolder'):
    # extract required directory name from *path*
  

'./*/conditionfolder' может быть заменен любым регулярным выражением, доступным в командной строке.

Комментарии:

1. Шаблон глобуса не должен описываться как регулярное выражение.

2. @alani хотите подробнее остановиться на этом?

3. @KansaiRobot, вы можете прочитать о глобусе здесь: docs.python.org/2/library/glob.html

Ответ №2:

Вы можете использовать ОС.пройдите и просмотрите структуру каталогов и выполните печать на основе условия.

 import os

path_to_consider = r'c:devtestFolder'
for root,directory,file in os.walk(path_to_consider,topdown=True):
    for d in directory:
           if d == 'conditionfolder':
               print(f"The folder containing conditionFolder is {root}")
    for f in file:
         if f == 'conditionfile.txt':
             print(f"The folder containing conditionFile is {root}")