Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python将变量日期传递给函数_Python_Function - Fatal编程技术网

Python将变量日期传递给函数

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:

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)