如何对JSON文本中特定结构内的数字执行乘法运算
解决方案
方案1:JSON解析方案(推荐)
你要处理的内容本身是标准JSON结构,用JSON库解析处理比正则更稳定,不会出现匹配遗漏、误改其他字段的问题,适配所有合法的数值格式:
import json import os def process_single_file(file_path): with open(file_path, 'r', encoding='utf-8') as f: raw_content = f.read().strip() # 处理末尾多余逗号,包装为合法JSON数组 if raw_content.endswith(','): raw_content = raw_content[:-1] data_list = json.loads(f'[{raw_content}]') for item in data_list: if 'DstQuad' in item: item['DstQuad'] = [num * 4 for num in item['DstQuad']] if 'SrcQuad' in item: item['SrcQuad'] = [num * 4 for num in item['SrcQuad']] # 还原原始格式,不需要末尾逗号可删除最后的+ ',' output = json.dumps(data_list, ensure_ascii=False)[1:-1] + ',' with open(file_path, 'w', encoding='utf-8') as f: f.write(output) # 批量处理目标文件夹下所有文件,替换为你的文件夹路径 target_dir = './your_file_folder' for file_name in os.listdir(target_dir): full_path = os.path.join(target_dir, file_name) if os.path.isfile(full_path): process_single_file(full_path)
方案2:修正版正则方案
如果你需要沿用正则匹配的方式,你原来的代码问题是捕获组数量和格式化参数不匹配,且逻辑过于僵硬,可替换为以下代码:
import re def process_quad_match(match): # 提取数组内的所有数字逐个乘4 num_list = match.group(2).split(',') processed = [str(int(num.strip()) * 4) for num in num_list] return f'{match.group(1)}[{",".join(processed)}]' # 匹配所有DstQuad和SrcQuad对应的数组 editor.rereplace(r'("(DstQuad|SrcQuad)":\[)([\d,-]+)\]', process_quad_match)
内容的提问来源于stack exchange,提问作者Hector Suarez
相关产品推荐
相关产品推荐

