Python 2: сравнить временную метку между двумя моментами времени - PullRequest
0 голосов
/ 17 мая 2018

Для моего скрипта мне нужно использовать Python 2.6 только со стандартной библиотекой.Я пытаюсь написать сценарий, который просматривает каталог журналов, для которого определено условие, совпадающее только с журналами с соответствующей отметкой времени.Временная метка, которую я использую, получена из имени файла.Я не хочу использовать временные метки ОС, потому что иногда файлы копируются в другой каталог, чтобы предотвратить их перезапись, и это изменяет время изменения файла.

Новый файл создается каждые 200 МБ.Временная метка в имени файла - это время, когда файл был создан, и представляет самую старую запись журнала в файле.

import datetime

# One event might span multiple log files.
call_start = datetime.datetime(2018, 5, 15, 5, 25, 9)
call_stop = datetime.datetime(2018, 5, 15, 5, 37, 38)

# Timestamp values of file generated from file's naming convention
t1 = datetime.datetime(2018, 5, 15, 4, 48, 16)
t2 = datetime.datetime(2018, 5, 15, 5, 3, 53)
t3 = datetime.datetime(2018, 5, 15, 5, 19, 14)
t4 = datetime.datetime(2018, 5, 15, 5, 35)
t5 = datetime.datetime(2018, 5, 15, 5, 49, 19)

file_times = [t1, t2, t3, t4, t5]

matching_times = []
for ftime in file_times:
    # Logic I can't figure out
    if scratches_head:
        matching_times.append(ftime)

# I would expect the matching_times list to contain t3 and t4

Редактировать

Уточнение из comments :

t3 - это файл, созданный в 5:19:14am.call_start - первая запись, которую я бы увидел в журнале.Это начинается в 5:25:09am.Так как t4 не был создан до 5:35:00am, call_start должен быть в t3.call_stop - последняя запись в журнале, которую я хочу найти.Я был бы в t4, потому что t5 был создан в 5:49:19am.

1 Ответ

0 голосов
/ 18 мая 2018

Одним из способов будет enumerate() для элементов в вашем списке и создание диапазонов из каждой последовательной пары раз.Затем проверьте, не перекрывается ли какой-либо из этих диапазонов с (call_start, call_end).Если диапазон перекрывается, добавьте начало диапазона в свой список.Вы также должны включить в последний раз проверку в списке.

Например:

for i, ftime in enumerate(file_times):
    if i+1 >= len(file_times):
        # last item in list, add if it's less than call_stop
        scratches_head = ftime < call_stop
    else:
        # check if ranges overlap
        fstart = ftime
        fend = file_times[i+1]
        scratches_head = (fstart <= call_stop) and (fend >= call_start)

    if scratches_head:
        matching_times.append(ftime)

print([datetime.datetime.strftime(x, "%Y-%m-%d %H:%M:%S") for x in matching_times])
#['2018-05-15 05:19:14', '2018-05-15 05:35:00']
...