使用逻辑运算符(时间值)将新项目附加到 Python 列表

Appending new items to a Python list with logic operators (Time values)

我开始 Python 一份工作(我习惯了 R),我必须从 API 获取每日数据 returns 日期时间和值(播客上一定数量的听众),然后将该数据发送到 bigquery 数据库。

拆分日期和时间后,我需要添加一个新列来指示当时正在播放的节目。换句话说:

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

我 运行 遇到了几个问题,即时间被拆分为字符串(可能是因为我们使用 google data studio,它具有非常严格的日期时间执行)。

How would you go about it?

 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"])

您需要 'DB' 节目时间表。见下文。 您的循环将使用时间值调用下面的函数,您将获得程序名称。

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'}