Python将变量日期传递给函数
您好:正在取得进展,但仍在努力。我有以下json:Python将变量日期传递给函数,python,function,Python,Function,您好:正在取得进展,但仍在努力。我有以下json: json = { "emeter": { "get_daystat": { "day_list": [ { "year": 2016, "month": 10, "day": 1, "energy": 0.651000 }, { "year": 2016, "month": 10, "day": 2, "energy": 0.349000 }, { "year": 2016
json =
{
"emeter": {
"get_daystat": {
"day_list": [
{ "year": 2016, "month": 10, "day": 1, "energy": 0.651000 },
{ "year": 2016, "month": 10, "day": 2, "energy": 0.349000 },
{ "year": 2016, "month": 10, "day": 3, "energy": 0.481000 }
],
"err_code": 0
}
}
}
我使用线性搜索,通过此函数查找特定日期的能量值:
parsed_json = json.loads(json)
def get_energy_value_by_date(obj, year, month, day):
for value in obj['emeter']['get_daystat']['day_list']:
if value['year'] == year and value['month'] == month and value['day'] == day:
return value['energy']
energy = get_energy_value_by_date(parsed_json, 2016, 10, 2)
到目前为止还不错。接下来我需要做的是找到不同日子的能量值。例如今天(假设json有效):
当我运行这个脚本时,它会返回
None
我一定错过了一些基本的东西。我需要的是能够提取任何一年中任何一个月的任何一天的能量值进行进一步处理
谢谢
猴面包树(Baobab)你的脚本有一个简单的问题:,根据文档,将 返回表示日期的字符串,由显式格式字符串控制 此处的关键字为“字符串”。请参见以下内容:
>>> import datetime
>>> day_now = datetime.datetime.now().strftime("%d")
>>> day_now
'04'
这不等于JSON文件中当天的整数值:
>>> '04' == 4
False
因此,相等性检查将始终失败,并且将返回None
。一种方法是使用int
将此值转换为整数。更好的方法是使用datetime
对象的属性来获取整数值:
>>> datetime.datetime.now().year
2016
>>> datetime.datetime.now().month
10
>>> datetime.datetime.now().day
4
我还建议只向函数传递一个date
对象,并将其解包到那里:它可以防止冗余并清除函数签名。您还应该使用date.today()
而不是datetime.now()
(因为时间不相关),然后在一次操作中进行比较。完整功能可以是这样的:
def get_energy_value_by_date(obj, current_day):
for value in obj['emeter']['get_daystat']['day_list']:
if current_day == datetime.date(value['year'], value['month'], value['day']):
return value['energy']
current_day = datetime.date.today()
energy_today = get_energy_value_by_date(parsed_json, current_day)
print (energy_today)
现在打印日期、现在打印月份等。从那里开始调试。问题是您需要将变量转换为整数。@Baobab我编辑了我的上一个函数,以包含一些简单的逻辑——请看一下!
def get_energy_value_by_date(obj, current_day):
for value in obj['emeter']['get_daystat']['day_list']:
if current_day == datetime.date(value['year'], value['month'], value['day']):
return value['energy']
current_day = datetime.date.today()
energy_today = get_energy_value_by_date(parsed_json, current_day)
print (energy_today)