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

从ADX查询的字符串转numpy数组:寻求更安全的转换方案

替代方案推荐

方案1:用ast.literal_eval替代eval

eval会执行任意代码,风险极高,ast.literal_eval只解析Python合法字面量(列表、数字等),安全性拉满,逻辑和你原来的思路一致:

import numpy as np
import ast

mydummystring = '[1.0,2.0,3.0][4.0,5.0,6.0][6.0,7.0,8.0]'
# 把字符串改成合法的嵌套列表格式
fixed_str = '[' + mydummystring.replace('][', '],[') + ']'
# 安全解析列表
parsed_list = ast.literal_eval(fixed_str)
# 转numpy数组
mynumpyarray = np.array(parsed_list)

方案2:正则表达式提取重组

如果字符串格式固定,直接提取所有数值再重组,不用纠结格式修正:

import numpy as np
import re

mydummystring = '[1.0,2.0,3.0][4.0,5.0,6.0][6.0,7.0,8.0]'
# 提取所有浮点数并转成float
nums = list(map(float, re.findall(r'\d+\.\d+', mydummystring)))
# 按每组3个元素重组为二维数组
mynumpyarray = np.array(nums).reshape(-1, 3)

要是子数组长度不固定,就先匹配每个[]里的内容再单独处理:

import numpy as np
import re

mydummystring = '[1.0,2.0,3.0][4.0,5.0,6.0][6.0,7.0,8.0]'
# 抓出每个[]内的内容
sub_arr_strs = re.findall(r'\[(.*?)\]', mydummystring)
# 逐个转成float数组再合并
mynumpyarray = np.array([list(map(float, s.split(','))) for s in sub_arr_strs])

方案3:转JSON格式解析

把字符串修正成合法JSON格式,用自带的json模块解析,同样安全可靠:

import numpy as np
import json

mydummystring = '[1.0,2.0,3.0][4.0,5.0,6.0][6.0,7.0,8.0]'
# 修正为合法JSON数组
json_str = '[' + mydummystring.replace('][', '],[') + ']'
# 解析JSON
parsed_list = json.loads(json_str)
# 转numpy数组
mynumpyarray = np.array(parsed_list)

方案选型参考

  • 追求简洁安全:优先选ast.literal_eval或JSON方案,和原逻辑对齐,代码量少。
  • 格式复杂/需灵活提取:用正则方案,适配子数组长度不固定、有干扰字符的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:12:11