Использование списка понимания и datetime для генерации списка раз в Python - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь создать список, сгенерированный с использованием понимания списка, с шагом в 1 минуту. Затем он будет конвертировать даты / время в формат ISO 8601. Вот как я думал, что решение будет выглядеть так:

import datetime as dt

t1 = dt.datetime(2001, 10, 10, 0, 0, 0)

t2 = dt.datetime(2001, 10, 15, 0, 0, 0)

time = [t1 + dt.timedelta(minutes = x) for x in range((t2-t1).total_seconds()/60)]

isotime = time.isoformat()

Это полуправильно?

Ответы [ 3 ]

1 голос
/ 01 октября 2019

думаю, что это может быть проще с помощью панд:

import pandas as pd
t1 = pd.to_datetime('2001-10-10 00:00:00')
t2 = pd.to_datetime('2001-10-15 00:00:00')
series = pd.date_range(t1,t2,freq='1min')
iso8601 = [t.strftime('%Y%m%dT%H:%M%SZ') for t in series]

output:

['20011010T00:0000Z', '20011010T00:0100Z', '20011010T00:0200Z', '20011010T00:0300Z', ... ,  
'20011014T23:5700Z', '20011014T23:5800Z', '20011014T23:5900Z', '20011015T00:0000Z']
0 голосов
/ 01 октября 2019

Вы на правильном пути. Попробуйте следующие настройки:

  • Используйте .isoformat() внутри понимания.
  • Используйте int(), чтобы range() получило целое число вместо числа с плавающей запятой.

Это должно сработать:

import datetime as dt

t1 = dt.datetime(2001, 10, 10)
t2 = dt.datetime(2001, 10, 15)

isotimes = [
    (t1 + dt.timedelta(minutes=minutes)).isoformat()
    for minutes in range(int((t2 - t1).total_seconds() // 60))
]

Вы также можете использовать большую библиотеку, такую ​​как pandas, хотя это приведет к потере времени при импорте.

0 голосов
/ 01 октября 2019

Необходимо применить isoformat к каждому элементу в списке time:

isotime = [t.isoformat() for t in time]

Также обратите внимание, что range принимает только целые числа. Вы должны изменить range((t2-t1).total_seconds()/60) на range(int((t2-t1).total_seconds()/60))

Хотя лучше всего использовать pandas, как предложил @Derek Eden.

...