在遍历嵌套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
相关产品推荐
相关产品推荐

