如何将Python中存储为字符串的嵌套列表还原为原生列表格式
问题说明
现有对应小型图像数据的Python嵌套列表,存储前被转换为字符串格式,示例如下:
'[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]'
需要无需自行编写解析器的方案,将其还原为原生嵌套列表格式。
方案1:使用ast.literal_eval(推荐)
ast.literal_eval是Python标准库内置的安全字面量解析工具,仅会识别Python原生字面量结构(列表、字典、数字、字符串、元组等),不会执行任意代码,安全性远高于eval,完全满足需求:
import ast # 填入你的列表字符串 list_str = '[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], ...(省略其余内容)]' # 直接转换为嵌套列表 nested_list = ast.literal_eval(list_str)
转换完成后nested_list就是原生的嵌套列表结构,可直接作为图像数据使用。
方案2:使用json.loads(可选)
你提供的字符串格式完全符合JSON数组的语法规范,也可以通过标准库json模块完成转换:
import json list_str = '[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], ...(省略其余内容)]' nested_list = json.loads(list_str)
注意事项
- 禁止直接使用
eval()进行转换,eval()会执行字符串内的任意代码,若字符串来源不可信存在严重安全隐患。 - 两种方案均为Python标准库内置功能,无需安装任何第三方依赖。
内容的提问来源于stack exchange,提问作者user23415

