#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}")