#python #python_3x #python_2x #время
Как сгенерировать список дата+время в каком-либо диапазоне с заданным шагом? Например, мне нужно, чтобы скрипт автоматически вывел куда-нибудь (да хоть в текстовый файл) все возможные варианты дата:время (например MM/DD/YYYY:hh:mm:ss), которые присутствуют в интервале 10/25/2015:00:00:05 - 10/25/2015:23:59:58 с шагом, например 33 секунды. В моем видении, вывод должен быть таким: 10/25/2015:00:00:05 10/25/2015:00:00:39 ... 10/25/2015:14:27:28 ... 10/25/2015:21:49:18
Ответы
Ответ 1
Используйте модуль datetime: datetime.datetime -- для хранение времени datetime.timedelta -- для увеличения времени на указанное значение времени strptime -- для разбора объекта datetime.datetime по шаблону strftime -- для получения строки с датой из объекта datetime.datetime по шаблону Пример: import datetime as DT date_fmt = '%m/%d/%Y:%H:%M:%S' step = DT.timedelta(seconds=33) start_date = DT.datetime.strptime('10/25/2015:00:00:05', date_fmt) last_date = DT.datetime.strptime('10/25/2015:23:59:58', date_fmt) while start_date <= last_date: print(start_date, '|', start_date.strftime(date_fmt)) start_date += step # 2015-10-25 00:00:05 | 10/25/2015:00:00:05 # 2015-10-25 00:00:38 | 10/25/2015:00:00:38 # 2015-10-25 00:01:11 | 10/25/2015:00:01:11 # 2015-10-25 00:01:44 | 10/25/2015:00:01:44 # 2015-10-25 00:02:17 | 10/25/2015:00:02:17 # ...Ответ 2
Ленивый вариант с использованием модуля Pandas: import pandas as pd # pip install pandas / conda install pandas DT_FMT = "%m/%d/%Y:%H:%M:%S" def get_date_range(dt_from, dt_to, freq="1D", dt_fmt=DT_FMT, **kwargs): dt_from = pd.to_datetime(dt_from, format=dt_fmt) dt_to = pd.to_datetime(dt_to, format=dt_fmt) return pd.date_range(dt_from, dt_to, freq=freq, **kwargs) (get_date_range("10/25/2015:00:00:05", "10/25/2015:23:59:58", freq="33S") .to_frame(name="TimeStamp") .to_csv("c:/temp/result.csv", date_format=DT_FMT, index=False)) Результат (C:\temp\result.csv): TimeStamp 10/25/2015:00:00:05 10/25/2015:00:00:38 10/25/2015:00:01:11 ... 10/25/2015:23:58:20 10/25/2015:23:58:53 10/25/2015:23:59:26Ответ 3
Можно с помощью встроенной функции range: from datetime import datetime, timedelta f = '%m/%d/%Y:%H:%M:%S' beg, fin = [datetime.strptime(d, f) for d in ['10/25/2015:00:00:05', '10/25/2015:23:59:58']] step = 33 ts = [beg + timedelta(seconds=s) for s in range(0, int((fin - beg).total_seconds() + 1), step)] В ts будет: ['10/25/2015:00:00:05', '10/25/2015:00:00:38', '10/25/2015:00:01:11', ... '10/25/2015:23:58:20', '10/25/2015:23:58:53', '10/25/2015:23:59:26'] Демо.
Комментариев нет:
Отправить комментарий