将看起来像列表的字符串转换为真正的列表 - python
Posted
技术标签:
【中文标题】将看起来像列表的字符串转换为真正的列表 - python【英文标题】:Converting string that looks like a list into a real list - python 【发布时间】:2013-12-13 13:30:27 【问题描述】:我的输入文件的行如下所示:
[(0, 1), (1, 3), (2, 1), (3, 1), (4, 1)]
[(0, 1, 6), (1, 3,7), (3, 1,4), (3, 1,3), (8, 1,2)]
[1,2,3,5,3]
没有字母,没有小数,只有整数和元组中的元素个数一致。
如何将它们变成真正的元组列表/int 列表?
【问题讨论】:
【参考方案1】:Python 自带电池 - ast.literal_eval()
解决了这个问题:
>>> import ast
>>> ast.literal_eval("[(0, 1), (1, 3), (2, 1), (3, 1), (4, 1)]")
[(0, 1), (1, 3), (2, 1), (3, 1), (4, 1)]
>>> ast.literal_eval("[(0, 1, 6), (1, 3,7), (3, 1,4), (3, 1,3), (8, 1,2)]")
[(0, 1, 6), (1, 3, 7), (3, 1, 4), (3, 1, 3), (8, 1, 2)]
>>> ast.literal_eval("[1,2,3,5,3]")
[1, 2, 3, 5, 3]
【讨论】:
@alvas:请注意ast.literal_eval
是安全的,而eval
不是。
@StevenRumbalski 为什么 ast.literal_eval 安全而 eval 不安全?
@jeppo1:您要评估的字符串通常来自不受信任的来源。 eval
将运行任意代码。从第三方运行任意代码是一个安全漏洞。 ast.literal_eval
,因为它只解释“字符串、字节、数字、元组、列表、字典、集合、布尔值和无”而持有的插件。任何其他都是错误。以上是关于将看起来像列表的字符串转换为真正的列表 - python的主要内容,如果未能解决你的问题,请参考以下文章