我有一个字符串,它是numpy数组的列表。 字符串看起来像
k = '[array([ 0, 269, 175, 377]), array([ 0, 56, 149, 163])]'
当我这样做时
ast.literal_eval(k)
我收到错误说明格式错误的节点或字符串。
这是什么问题?有没有更好的方法将其转换回列表?
感谢您的帮助!!
答案 0 :(得分:3)
提供的字符串或节点可能只包含以下Python文字结构:字符串,字节,数字,元组,列表,字符串,集合,布尔值和无。
这里不能使用文字eval。首先查找这些字符串的生成位置,并在那里实现正确的序列化 - 例如使用numpy.save
。
答案 1 :(得分:1)
我不确定这是不是一个好方法。
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])]
()
ast.literal_eval
np.array
答案 2 :(得分:0)
import numpy as np
array = np.array
k = '[array([ 0, 269, 175, 377]), array([ 0, 56, 149, 163])]'
k = eval(k)
print(f"k = {k}, type of k = {type(k)}")
print(type(k[0]))
输出:
k = [array([ 0, 269, 175, 377]), array([ 0, 56])], type of k = <class 'list'>
<class 'numpy.ndarray'>