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

如何在Python中将CCTV摄像头API点标记文本转换为可操作对象?

针对CCTV摄像头点标记格式文本的Python处理方案

有没有专门的处理库?

  • 目前没有专门针对这类厂商自定义点标记格式的Python库,因为这类格式是非标准的,通用性较弱。但可以借助Python内置的字符串处理工具和数据结构来实现需求。

符合Python风格的实现方式

1. 解析为嵌套字典/列表(最直接方案)

Python的字典和列表天然适配这种层级化结构:

  • 把点标记中的.视为字典键的分隔符
  • 把[数字]视为列表的索引

比如table.VideoAnalyseRule[0][1].Enable可以解析为如下结构:

config = {
    "table": {
        "VideoAnalyseRule": [
            [],
            {"Enable": True, "RuleName": "区域入侵检测"}
        ]
    }
}

修改配置时直接通过字典/列表的索引操作即可,比如:

# 关闭规则
config["table"]["VideoAnalyseRule"][0][1]["Enable"] = False
# 修改规则名称
config["table"]["VideoAnalyseRule"][0][1]["RuleName"] = "边界越线检测"

2. 用类型化对象增强可读性(可选)

如果需要更严谨的类型检查和代码提示,可以用dataclasses或pydantic定义规则结构:

from dataclasses import dataclass
from typing import List, Optional

@dataclass
class VideoAnalyseRule:
    enable: bool
    rule_name: str
    schedule: Optional[dict] = None

@dataclass
class CameraConfig:
    video_analyse_rules: List[List[VideoAnalyseRule]]  # 外层为通道,内层为该通道的规则列表

解析后将字典转换为这些类型化对象,修改完成后再转回字典,最后用json.dumps()生成API所需的JSON payload。

3. 生成JSON指令

无论用字典还是类型化对象,最终都可以通过Python内置的json模块生成符合要求的API指令:

import json

# 假设config是已修改好的字典结构
api_payload = json.dumps(config, indent=2)
# 后续将payload发送至摄像头API即可完成配置更新

是否需要编写自定义解析器?

是的,因为这种点标记格式是非标准的,必须自行实现解析逻辑。核心逻辑并不复杂,主要处理两类片段:

  • 普通键(如table、Enable)
  • 带索引的键(如VideoAnalyseRule[0][1])

以下是一个简易的解析函数示例:

def parse_dot_notation(dot_str, value, config=None):
    if config is None:
        config = {}
    parts = dot_str.split('.')
    current = config

    for part in parts[:-1]:
        if '[' in part:
            # 拆分键和索引列表,如VideoAnalyseRule[0][1] → key=VideoAnalyseRule, indices=[0,1]
            key, indices_str = part.split('[', 1)
            indices = [int(i.strip('[]')) for i in indices_str.split('][')]
            
            # 初始化列表结构
            if key not in current:
                current[key] = []
            current_list = current[key]
            
            # 逐层进入列表索引
            for idx in indices[:-1]:
                while len(current_list) <= idx:
                    current_list.append([])
                current_list = current_list[idx]
            
            # 处理最后一个索引对应的字典
            last_idx = indices[-1]
            while len(current_list) <= last_idx:
                current_list.append({})
            current = current_list[last_idx]
        else:
            # 处理普通字典键
            if part not in current:
                current[part] = {}
            current = current[part]
    
    # 设置最终键值对
    last_part = parts[-1]
    if '[' in last_part:
        key, idx_str = last_part.split('[', 1)
        idx = int(idx_str.strip('[]'))
        if key not in current:
            current[key] = []
        while len(current[key]) <= idx:
            current[key].append(None)
        current[key][idx] = value
    else:
        current[last_part] = value
    
    return config

# 使用示例
config = parse_dot_notation("table.VideoAnalyseRule[0][1].Enable", True)
config = parse_dot_notation("table.VideoAnalyseRule[0][1].RuleName", "区域入侵检测")

额外建议

  • 批量解析:收集所有点标记键值对后一次性解析为完整配置对象,避免重复解析开销
  • 容错处理:解析和修改时用dict.get()或捕获KeyError,避免因格式变动导致程序崩溃
  • 校验逻辑:解析完成后可对比原始点标记文本,确认解析结果的准确性

内容的提问来源于stack exchange,提问作者The Frog

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 16:20:11