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

在遍历嵌套JSON的递归函数中添加条件筛选目标备份磁盘

首先实现容量字符串转数值的辅助函数,再修改原递归逻辑加入筛选规则即可,完整代码如下:

import json

def parse_size(size_str):
    # 将带单位的容量字符串转换为以T为单位的浮点数
    size_num = float(size_str.replace(',', '.')[:-1])
    unit = size_str[-1].upper()
    if unit == 'G':
        return size_num / 1024
    elif unit == 'T':
        return size_num
    # 其他更小单位肯定小于5T,直接返回0
    return 0

def find_backup_disk(data_list, result):
    for d in data_list:
        # 依次匹配备份盘三个规则
        # 1. 容量大于5.0T
        size_in_t = parse_size(d['size'])
        if size_in_t > 5.0:
            # 2. 存在children且列表长度恰好为1
            if 'children' in d and len(d['children']) == 1:
                # 3. 唯一子元素不存在下一级children
                child = d['children'][0]
                if 'children' not in child:
                    result.append(d['name'])
        # 递归遍历子节点
        if 'children' in d:
            find_backup_disk(d['children'], result)
    return result

with open('path to json file') as file:
    data = json.load(file)

print(find_backup_disk(data['blockdevices'], []))

运行后输出为:

['sde']

逻辑说明

  • parse_size函数统一把不同单位的容量换算为TB为单位的浮点数,解决原字符串格式无法直接比较大小的问题
  • 递归遍历所有块设备时,只有完全匹配三个规则的设备才会被加入结果列表
  • children长度不为1的设备会被直接过滤,符合你的筛选需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:48:04