Как создать серию с диапазоном недель? - PullRequest
0 голосов
/ 03 октября 2018

Я хочу создать список последних 6 рабочих недель, начиная с этого момента.

То, что у меня сейчас работает, это:

import datetime
cww = datetime.datetime.now().isocalendar()[1]
cy = datetime.datetime.now().isocalendar()[0]
l6ww = [str(cy)[2:]+'WW'+str(w) for w in range(cww-5,cww+1)]

print l6ww

['18WW35', '18WW36', '18WW37', '18WW38', '18WW39', '18WW40']

Это будет работать до первого WWв следующем году.Я могу придумать несколько способов решения этой проблемы, но хотел что-то более изящное.

1 Ответ

0 голосов
/ 03 октября 2018

Вы можете использовать datetime.timedelta():

import datetime

now = datetime.datetime.now().isocalendar()

l6ww = [(datetime.datetime.now() - datetime.timedelta(weeks=x)).isocalendar() for x in range(6)]

final = [str(i[0])[2:] + 'WW' + str(i[1]) for i in l6ww][::-1]

Доходность:

['18WW35', '18WW36', '18WW37', '18WW38', '18WW39', '18WW40']

Это будет работать, даже если вы перейдете в новый год, вперед на x недель или в прошломх недель.Вы также можете немного изменить этот код, чтобы продвигаться вперед:

l6ww = [(datetime.datetime.now() + datetime.timedelta(weeks=x)).isocalendar() for x in range(15)]

final = [str(i[0])[2:] + 'WW' + str(i[1]) for i in l6ww]

Выход:

['18WW40', '18WW41', '18WW42', '18WW43', '18WW44', '18WW45', '18WW46', '18WW47', '18WW48', '18WW49', '18WW50', '18WW51', '18WW52', '19WW1', '19WW2']
...