我有一个字符串,其中包含一个numpy数组的列表。 该字符串的格式如下:
k = '[array([ 0, 269, 175, 377]), array([ 0, 56, 149, 163])]'
当我执行
ast.literal_eval(k)
我遇到了一个错误,显示节点或字符串格式不正确。
问题出在哪里?有没有更好的方法将其转换回列表?
谢谢帮助!
我有一个字符串,其中包含一个numpy数组的列表。 该字符串的格式如下:
k = '[array([ 0, 269, 175, 377]), array([ 0, 56, 149, 163])]'
当我执行
ast.literal_eval(k)
我遇到了一个错误,显示节点或字符串格式不正确。
问题出在哪里?有没有更好的方法将其转换回列表?
谢谢帮助!
ast.literal_eval
文档中:
在此不可能使用文字评估。找到这些字符串最初生成的位置,并在那里实现适当的序列化-例如使用提供的字符串或节点只能由以下Python文字结构组成:字符串、字节、数字、元组、列表、字典、集合、布尔和 None。
numpy.save
。我不确定这是否是一个好的方法。
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
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'>
literal_eval()
的整个目的是避免在生产代码中使用 eval()
,因为后者是危险的。 - SigmaX
array(…)
是一个调用,而不是字面上的任何东西。你需要仅使用常规列表创建字符串或在ast.literal_eval
之前/之外使用其他内容。 - Ry-