Добавление новых элементов в список Python с помощью логических операторов (значения времени) - PullRequest
0 голосов
/ 20 февраля 2019

Я начинаю работать на Python на работе (я привык к R), где я должен получать ежедневные данные из API, который возвращает дату и время (это определенное количество слушателей на подкасте) изатем отправьте эти данные в базу данных BigQuery.

После того, как я разделил дату и время, мне нужно добавить новый столбец, который указывает, какая программа воспроизводилась в тот момент.Другими словами:

if time is >= than 11:00 and <= 11:59 then add a 'program name' value to the row into the column 'program'.

Я столкнулся с несколькими проблемами, а именно с тем, что время было разделено на строки (возможно, из-за того, что мы используем данные Googleстудия, которая имеет чрезвычайно жесткую реализацию datetime).

Как бы вы поступили?

 if response.status_code == 200:
     data = response.text
     result = json.loads(data)
     test = result

     #Append Items
     for k in test:
         l = []
         l.append(datetime.datetime.strptime(k["time"], "%Y-%m-%dT%H:%M:%S.%fZ").strftime("%Y-%m-%d"))
         l.append(datetime.datetime.strptime(k["time"], "%Y-%m-%dT%H:%M:%S.%fZ").astimezone(pytz.timezone("America/Toronto")).strftime("%H:%M"))

         l.append(k["value"])

1 Ответ

0 голосов
/ 20 февраля 2019

Вам необходимо иметь «БД» расписания программ.Увидеть ниже.Ваш цикл вызовет функцию ниже со значением времени, и у вас будет название программы.

import datetime
from collections import namedtuple

Program = namedtuple('Program', 'name start end')

PROGRAMS_DB = [Program('prog1', datetime.time(3, 0, 0), datetime.time(3, 59, 0)),
           Program('prog2', datetime.time(18, 0, 0), datetime.time(18, 59, 0)),
           Program('prog3', datetime.time(4, 0, 0), datetime.time(4, 59, 0))]


def get_program_name(time_val):
    for program in PROGRAMS_DB:
        if program.start <= time_val <= program.end:
            return program.name


data_from_the_web = [{"time": "2019-02-19T18:10:00.000Z", "value": 413, "details": None},
                 {"time": "2019-02-19T15:12:00.000Z", "value": 213, "details": None}]

for entry in data_from_the_web:
    t = datetime.datetime.strptime(entry["time"], "%Y-%m-%dT%H:%M:%S.%fZ").time()
    entry['prog'] = get_program_name(t)

for entry in data_from_the_web:
    print(entry)

Выход

{'prog': 'prog2', 'details': None, 'value': 413, 'time': '2019-02-19T18:10:00.000Z'}
{'prog': None, 'details': None, 'value': 213, 'time': '2019-02-19T15:12:00.000Z'}
...