Как я могу заставить этот скрипт проверять каждый файл в каталоге, НО не записывать каждую отдельную проверку? - PullRequest
0 голосов
/ 07 февраля 2019

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

def depdelete(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 from' + path)
                with open(completeName, 'a') as ddr:
                    ddr.write('Dep Files have been deleted from' + path + '. \n')
            else:
                print('No Dep Files found in' + path)
                with open(completeName, 'a') as ddr:
                    ddr.write('No Further Dep Files found in' + path + '. \n')

Теперь скрипт работает так, как задумано.Файлы удаляются и записываются правильно.Однако в своем текущем состоянии оператор Else выполняется для каждого файла в пути, что приводит к повторяющимся записям «Не найдены дополнительные файлы Dep. В ...».

Я хотел бы изменить это так, чтобы онпроверяет каждый файл, но после проверки всего файла записывает только один экземпляр «Больше файлов Dep не найдено в ...»

По сути, как я могу сделать проверку каждого файла вдиректорию, но только один раз записывайте «Больше файлов Dep не найдено в ...» после проверки каждого файла.

В настоящий момент вид сбоя с ощущением «на кончике моего языка».Советы?

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Это, кажется, нужно только немного реструктурировать.

def depdelete(path):

    wereThereAnyDepFiles = False

    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 from' + path)
                with open(completeName, 'a') as ddr:
                    ddr.write('Dep Files have been deleted from' + path + '. \n')
                wereThereAnyDepFiles = True

    if not wereThereAnyDepFiles:
        print("No Dep files found in "+path)

Ниже то, что записано в файл, предполагает, что вы хотите, чтобы это указывало на то, что конец проверки достигнут, и вы не можете найти больше .exe файлов.,Используя это предположение, было бы лучше поместить оператор вне блока , если , как я сделал ниже.Если я неправильно понял ваше намерение, поместив оператор в блок if , вы получите то, что вам нужно.

    with open(completeName, 'a') as ddr:
        ddr.write('No Further Dep Files found in'+path+'. \n')
0 голосов
/ 07 февраля 2019

Вместо этого используйте флаг.

def depdelete(path):

    for path, dirs, files in os.walk(path):
        for f in files:
            found = False              # Add a boolean as flag, reset each iteration
            if f.endswith('.exe'):
                found = True           # Set the flag so "No further..." will not be triggered
                os.remove(os.path.join(path, f))
                print('Dep Files have been deleted from' + path)
                with open(completeName, 'a') as ddr:
                    ddr.write('Dep Files have been deleted from' + path + '. \n')
            if not found:              # check the flag
                print('No Dep Files found in' + path)
                with open(completeName, 'a') as ddr:
                    ddr.write('No Further Dep Files found in' + path + '. \n')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...