【发布时间】: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 列表?
【问题讨论】:
标签: python string list int tuples
我的输入文件的行如下所示:
[(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 列表?
【问题讨论】:
标签: python string list int tuples
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]
【讨论】:
ast.literal_eval 是安全的,而eval 不是。
eval 将运行任意代码。从第三方运行任意代码是一个安全漏洞。 ast.literal_eval,因为它只解释“字符串、字节、数字、元组、列表、字典、集合、布尔值和无”而持有的插件。任何其他都是错误。