Python 转换具有数组()列表的字符串时,ast.literal_eval()节点或字符串格式不正确
我有一个字符串,它是numpy数组的列表。 绳子看起来像Python 转换具有数组()列表的字符串时,ast.literal_eval()节点或字符串格式不正确,python,numpy,abstract-syntax-tree,Python,Numpy,Abstract Syntax Tree,我有一个字符串,它是numpy数组的列表。 绳子看起来像 k = '[array([ 0, 269, 175, 377]), array([ 0, 56, 149, 163])]' 当我这样做的时候 ast.literal_eval(k) 我得到一个错误,说节点或字符串格式不正确 这里有什么问题?有没有更好的方法将其转换回列表 谢谢你的帮助 我不确定这是否是一个好方法 from numpy import array import ast import re k = '[array([
k = '[array([ 0, 269, 175, 377]), array([ 0, 56, 149, 163])]'
当我这样做的时候
ast.literal_eval(k)
我得到一个错误,说节点或字符串格式不正确
这里有什么问题?有没有更好的方法将其转换回列表
谢谢你的帮助 我不确定这是否是一个好方法
from numpy import array
import ast
import re
k = '[array([ 0, 269, 175, 377]), array([ 0, 56, 149, 163])]'
val = re.findall(r"\((.*?)\)", k)
val = list(map(ast.literal_eval, val))
val = list(map(array, val))
print(val)
输出:
[array([ 0, 269, 175, 377]), array([ 0, 56, 149, 163])]
k = [array([ 0, 269, 175, 377]), array([ 0, 56])], type of k = <class 'list'>
<class 'numpy.ndarray'>
- 使用正则表达式提取
()
- 应用
ast.literal\u eval
- 应用
np.array
[array([ 0, 269, 175, 377]), array([ 0, 56, 149, 163])]
k = [array([ 0, 269, 175, 377]), array([ 0, 56])], type of k = <class 'list'>
<class 'numpy.ndarray'>
k=[array([0269175377]),array([0,56]),k的类型=
数组(…)
是一个调用,而不是文本。您需要仅使用常规列表创建字符串,或者在ast.literal\u eval之前/之外使用其他内容。您可能首先应该避免这样做。为什么要得到这些字符串?它们被序列化为数组而不是列表有什么原因吗?聪明。只要OP数据的形状不变,它就可以工作——我不认为这是一种长期的方法,但可以将其视为一种临时/临时的解决方法,直到生成相关字符串的内容得到修复为止。@charlesduff。我同意,这不是一个适当的解决办法。最好是修复OP输入的源。