счетчик для цикла, отчетности 1 - PullRequest
1 голос
/ 01 апреля 2019

Я просто пытаюсь добавить счетчик вокруг моего цикла for, чтобы подсчитать, сколько файлов в моем каталоге на квалификацию содержит 'VCCS' ... логика работает для итерации, так как итерация по моему каталогу количество раз, в котором у меня есть файл ... однако мой счетчик продолжает отчитываться 1. Соответствующие строки: files_in_directory market с комментариями # here.

Я получаю это предупреждение в PyLint: имя константы "files_in_directory" doesn't conform to UPPER_CASE naming stylepylint(invalid-name), files_in_directory = 0

Я пытался переместить набор 0, над и попытаться, есть мысли?

if __name__ == "__main__":
    try:
        currentDT = datetime.datetime.now()
        files_in_directory = 0 # here
        for filename in os.listdir(config.DIRECTORY_LOCATION):
            if filename.__contains__('VCCS'):
                old_stdout = sys.stdout
                log_file = open("./logs/metrics.log","w")
                sys.stdout = log_file
                files_in_directory += 1 # here

                PENDING_RECORDS = FindPendingRecords().get_excel_data()
                # Do operations on PENDING_RECORDS

                # Reads excel to map data from excel to vital
                MAP_DATA = FindPendingRecords().get_mapping_data()

                # Configures Driver
                VITAL_ENTRY = VitalEntry()

                # Start chrome and navigate to vital website
                VITAL_ENTRY.instantiate_chrome()

                # Begin processing Records
                VITAL_ENTRY.process_records(PENDING_RECORDS, MAP_DATA)

                print(f"Date: ")
                print (str(currentDT))                
                print(f"Files in Directory #{files_in_directory}") # here

                sys.stdout = old_stdout
                log_file.close()  

    except Exception as exc:
        # print(exc)
        raise

Ответы [ 2 ]

2 голосов
/ 01 апреля 2019

Примечание: это должно состоять из множества комментариев в интересах читабельности

Ваш вопрос, как он есть, не является MCVE.Чтобы сделать его более кратким и определить точную причину:

import os

if __name__ == "__main__":
    # Remove try block, just let it raise an error
    my_counter = 0

    for file in os.listdir("some_directory"):
        # you don't need to call the __contains__ method
        # as the 'in' keyword will invoke that for you
        if "VCCS" in file:

            # increment your counter first
            my_counter += 1
            print(file, my_counter)

Теперь нет никаких сомнений в том, что модифицирует my_counter, и это распечатает файл, который вы просматриваетевместе со счетчиком.

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

import os

if __name__ == "__main__":
    # Remove try block, just let it raise an error
    my_counter = 0

    for file in os.listdir("some_directory"):
         if 'VCCS' in file:
             my_counter += 1
             print(my_counter, file)

             # Add functions back in one by one
             PENDING_RECORDS = FindPendingRecords().get_excel_data()

Продолжайте этот процесс, пока не определите что вызывает ваше поведение.В настоящее время я не вижу ничего явного, что могло бы перезаписать эту переменную счетчика, поэтому я подозреваю, что либо А) код, который вы разместили, не отражает то, что выполняется, либо Б) вы модифицируете /сброс files_in_directory где-то еще в модуле.

Рекомендуемое редактирование:

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

0 голосов
/ 01 апреля 2019

Итак, первым делом: вы уверены, что передаете правильный каталог, и этот каталог действительно содержит более одного файла, содержащего VCCS в своем имени файла?

Я бы также попытался запустить этот код без блока Try / Except, чтобы проверить, не появляется ли ошибка после первого приращения.

ЛМК, что вы получаете, я надеюсь, это поможет.

...