You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用datetime动态命名Python嵌套对象处理JSON数据

解决方案

要实现JSON中月份部分的动态命名,核心是用datetime生成对应格式的月份字符串(如June24),替换代码中硬编码的June24字段。以下是修改后的完整代码及关键优化点:

修改后的代码

import json
from datetime import date
import requests

# 动态生成当前月份键名(格式:June24)和当日日期键
current_month_key = date.today().strftime("%B%y")
today_key = date.today().strftime("%Y%m%d")
filename = f"{current_month_key}.json"

# 初始化基础数据结构
device = {
    "Log_Cabin": {
        "month": {}
    }
}

# 从Shelly设备获取能源数据
url = 'http://192.168.0.241/cm?cmnd=Status%208'
resp = requests.get(url=url)
device_data = resp.json() 

# 提取所需数据
current_energy = device_data['StatusSNS']['ENERGY']['Power']
print(current_energy)

# 读取现有JSON文件(若存在则合并数据)
try:
    with open(filename, 'r') as f:
        existing_data = json.load(f)
    # 合并现有月份数据到当前结构,避免覆盖历史记录
    device["Log_Cabin"]["month"].update(existing_data.get("Log_Cabin", {}).get("month", {}))
except (FileNotFoundError, json.JSONDecodeError):
    print("未找到有效历史文件,将创建新文件")

# 确保当前月份的字典存在,不存在则初始化
if current_month_key not in device["Log_Cabin"]["month"]:
    device["Log_Cabin"]["month"][current_month_key] = {}
    # 初始化月度总计字段
    device["Log_Cabin"]["month"]["Monthly Total"] = {}

# 更新当日能源数据
device["Log_Cabin"]["month"][current_month_key][today_key] = current_energy

# 写入格式化后的JSON文件
with open(filename, 'w') as f:
    json.dump(device, f, indent=4)

print(current_energy)

关键修改说明

  • 动态月份键:通过date.today().strftime("%B%y")自动生成与文件名匹配的月份键,彻底替代硬编码的June24,实现月份的动态命名。
  • 数据合并:读取现有文件后使用update方法合并历史数据,确保不会丢失之前记录的日期或月份信息。
  • 安全初始化:通过判断月份键是否存在,避免重复创建或覆盖已有月份的记录,保证数据的一致性。
  • 格式化输出:添加indent=4参数让生成的JSON文件结构更清晰,便于后续查看和维护。

内容的提问来源于stack exchange,提问作者john Wallace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 02:49:53