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

问题描述 投票:0回答:1

我开始在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 data studio,它具有极其严格的日期时间实现)。

你会怎么做?

 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"])
python datetime strptime strftime
1个回答
1
投票

你需要有一个'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'}
© www.soinside.com 2019 - 2024. All rights reserved.