Python: как проверить папки внутри папок?

Во-первых, позвольте мне извиниться, если название неясно.

Чтобы упростить задачу, которую я выполняю на работе, я начал писать этот сценарий, чтобы автоматизировать удаление файлов по определенному пути.

Моя проблема в том, что в текущем состоянии этот скрипт не проверяет содержимое папок в пределах папки, указанной в пути.

Я не уверен, как это исправить, потому что, насколько я могу судить, должен проверяет эти файлы?

import os


def depdelete(path):
    for f in os.listdir(path):
        if f.endswith('.exe'):
            os.remove(os.path.join(path, f))
            print('Dep Files have been deleted.')
        else:
            print('No Dep Files Present.')


def DepInput():
    print('Hello, Welcome to DepDelete!')
    print('What is the path?')
    path = input()
    depdelete(path)


DepInput()

Возможно, вам потребуется выполнить проверку, является ли указанная запись также папка; если да, повторите те же шаги. Это требует рекурсии

N Chauhan 17.08.2018 15:30

используйте os.walk (путь)

Ankit S 17.08.2018 15:33
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
2
687
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Попробуйте использовать os.walk для обхода дерева каталогов, например:

def depdelete(path):
    for root, _, file_list in os.walk(path):
        print("In directory {}".format(root))
        for file_name in file_list:
            if file_name.endswith(".exe"):
                os.remove(os.path.join(root, file_name))
                print("Deleted {}".format(os.path.join(root, file_name)))

Вот документы (внизу есть несколько примеров использования): https://docs.python.org/3/library/os.html#os.walk

лучше использовать fnmatch.fnmatch(file_name,"*.exe"), чтобы он обрабатывал расширения .EXE / .exe в нижнем / верхнем регистре

Jean-François Fabre 17.08.2018 15:34

В настоящее время ваш код просто перебирает все файлы и папки в предоставленной папке и проверяет каждый из них на предмет его имени. Чтобы также проверять содержимое папок в пути, вы должны сделать свой код рекурсивным.

Вы можете использовать os.walk, чтобы пройти по дереву каталогов по пути, а затем проверить его содержимое.

Вы найдете более подробный ответ с примерами кода на Рекурсивный поиск подпапок и возврат файлов в списке python.

Взгляните на os.walk ()

Эта функция будет перебирать подкаталоги за вас. Петля будет выглядеть так.

for subdir, dirs, files in os.walk(path):
    for f in files:   
      if f.endswith('.exe'):
          fullFile = os.path.join(subdir, f)
          os.remove(fullFile)
          print (fullFile + " was deleted")

Вы ищете os.walk(). В вашем случае это могло бы работать так:

import os

def dep_delete(path):
    for path, dirs, files in os.walk(path):
       for f in files: 
           if f.endswith('.exe'):
               os.remove(os.path.join(path, f))
    print('Dep files have been deleted.')

def dep_input():
    print('Hello, Welcome to dep_delete!')
    print('What is the path?')
    path = input()
    dep_delete(path)


dep_input()

См. Также: Список древовидной структуры каталогов в Python?

Другие вопросы по теме