我有A号线.我想要转换为数组,但我面临错误.我介绍了当前和预期的输出.

import ast
import numpy as np

A = '\n[array([[[   0,   22],\n [   0,   23]]], dtype=int64)]'

# Remove unnecessary characters and fix dtype
A_cleaned = A.replace('\n', '').replace('dtype=int64', '').strip()

# Extract the content inside the outermost brackets
start_idx = A_cleaned.find('[')
end_idx = A_cleaned.rfind(']')
inner_list_str = A_cleaned[start_idx:end_idx+1]

# Replace 'array' with 'np.array'
inner_list_str = inner_list_str.replace('array', 'np.array')

# Use ast.literal_eval to safely evaluate the string as a Python literal
try:
    inner_list = ast.literal_eval(inner_list_str)
    np_array = np.array(inner_list)
    print("NumPy array:")
    print(np_array)
    print("Data type of np_array:", type(np_array))
except Exception as e:
    print(f"Error: Unable to convert the string to a NumPy array. {e}")

当前输出为

Error: Unable to convert the string to a NumPy array. malformed node or string on line 1: <ast.Call object at 0x000001709540B640>

预期yields 为

[array([[[   0,   22], [   0,   23]]])]

推荐答案

ast.literal_eval份文档中摘录:

计算表达式 node 或仅包含Python文本或容器显示的字符串.The string or node provided may only consist of the following Python literal structures: strings, bytes, numbers, tuples, lists, dicts, sets, booleans, None and Ellipsis.

这意味着你不能使用literal_eval来解析非原生类型,比如numpy.array.

以下是一些如何解决这个问题的建议:

  • use eval instead of ast.literal_eval
    (WARNING be careful as this might be harmful since string will be evaluated as python-code without any checks!!)
  • 也go 掉np.array部分,用ast.literal_eval将数据解析为list,然后将其转换为数字array.

Python相关问答推荐

我从带有langchain的mongoDB中的vector serch获得一个空数组

Python键入协议默认值

如何使用表达式将字符串解压缩到Polars DataFrame中的多个列中?

在Python中动态计算范围

我如何根据前一个连续数字改变一串数字?

为一个组的每个子组绘制,

为什么调用函数的值和次数不同,递归在代码中是如何工作的?

在Python中从嵌套的for循环中获取插值

ModuleNotFoundError:没有模块名为x时try 运行我的代码''

如果包含特定值,则筛选Groupby

使用python playwright从 Select 子菜单中 Select 值

如何重新组织我的Pandas DataFrame,使列名成为列值?

合并相似列表

极柱内丢失类型信息""

Django.core.exceptions.SynchronousOnlyOperation您不能从异步上下文中调用它-请使用线程或SYNC_TO_ASYNC

在Pandas 中以十六进制显示/打印列?

高效地计算数字数组中三行上三个点之间的Angular

极地数据帧:ROLING_SUM向前看

`Convert_time_zone`函数用于根据为极点中的每一行指定的时区检索值

将多行数据循环到嵌套框架中的单行