Python 转换具有数组()列表的字符串时,ast.literal_eval()节点或字符串格式不正确

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([

我有一个字符串,它是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([  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
来自:

提供的字符串或节点只能由以下Python文本结构组成:字符串、字节、数字、元组、列表、dicts、set、boolean和None

这里不可能使用文字eval。首先查找这些字符串的生成位置,并在那里实现适当的序列化—例如使用

输出:

[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输入的源。