Несогласованные результаты с одинаковыми logi c внутри и вне функции - PullRequest
0 голосов
/ 29 мая 2020

Я пишу код, чтобы проверить, сколько раз строка «TIME_DATA» появляется в моем файле журнала. Я новичок в Python, поэтому я написал logi c, а затем поместил logi c внутри функции, чтобы модулировать его для моей последней задачи.

Однако, когда я раскомментирую logi c outisde функции, я получаю несовместимые результаты между ними. Таким образом, предполагается, что код распечатывает «данные времени завершены», если счетчик больше 7. С одним и тем же logi c в двух отдельных областях, верхний logi c возвращает «данные времени завершены», но тот же logi c при вызове после возвращает «неполные временные данные». Почему это?:

tfile = open ('timetest.log', 'r')
tflines1 = tfile.readlines()

time_data_count = 0
for line in tflines1:
    if 'TIME_DATA' in line :
        time_data_count += 1
if time_data_count > 7 :
    print("time_data complete")
else:
    print("incomplete time_data data")

def file_check (f):
    tflines = f.readlines()
    time_data_count = 0
    for line in tflines:
        if 'TIME_DATA' in line:
            time_data_count += 1
    if time_data_count > 7:
        return "time_data complete"
    else:
        return "incomplete time_data data"

print(file_check(tfile))

Почему в функции file_check он проходит за верх, но не за нижний

Если я закомментирую верхнюю часть, лог c вне функции функция file_check ведет себя должным образом и возвращает «time_data complete»

1 Ответ

0 голосов
/ 29 мая 2020

Использование tfile.readlines() перемещает указатель файла в конец файла, поэтому, когда вы попытаетесь прочитать его снова, он вернет пустой список. Попробуйте добавить f.seek(0) к вашей функции следующим образом:

def file_check(f):
    f.seek(0)
    tflines = f.readlines()
    time_data_count = 0
    for line in tflines:
        if 'TIME_DATA' in line:
            time_data_count += 1
    if time_data_count > 7:
        return "time_data complete"
    else:
        return "incomplete time_data data"

Вы также можете просто сохранить строки в списке вместо того, чтобы читать их дважды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...