Python 3 поставляется с некоторыми datetime
функциями, такими как fromisoformat
и total_seconds
, чтобы сделать это проще.Если вы прочитали то, что вы ввели, как большую строку, вы можете извлечь и сделать объекты времени из всего, что показано ниже:
from datetime import datetime
# Extract the timestamps from the big string. Return a
# list of datetime objects.
def extract_times(times_data_string):
times = []
for line in times_data_string.strip().split('\n'):
date_string = line.split(' ')[-1].strip()
t = datetime.fromisoformat(date_string)
times.append(t)
return times
Если вы пытаетесь найти интервалы времени, когда последовательных времен больше нетс интервалом в 30 секунд, но общий интервал составляет не менее 30 минут (1800 секунд), вы можете сделать что-то вроде этого.Хотя я не знаю, насколько это работает, поскольку у ваших данных нет действительного примера.Примерно то, что я делаю здесь: 1) начните с первого раза, 2) продолжайте смотреть на временные метки, которые следуют до тех пор, пока не найдете последовательную пару с промежутком, превышающим 30 секунд, 3) посмотрите, будет ли это последний раз по крайней мере через 30 минут послевремя начала, 4) повторите процесс со второй меткой времени в исходных данных.
Есть более быстрые способы сделать это (например, мы могли бы начать с вычисления всех различий между последовательными временами, чтобы мы ненужно продолжать делать одни и те же вычисления снова и снова, а затем смотреть на подпоследовательности, где разница не превышает 30 секунд, но разница от начала до конца составляет не менее 1800 секунд).Но, надеюсь, это дает вам представление.
times = extract_times(time_info)
for i in times:
start_time = i
end_time = start_time
for j in times:
thirty_sec_test = ((j - end_time).total_seconds() <= 30.0)
if thirty_sec_test:
end_time = j
else:
break
if (j - i).total_seconds() >= 1800:
print("Valid block of time between these two:")
print(start_time)
print(end_time)
print('---')