提取嵌入在python中的字符串中的多个列表

时间:2017-06-24 13:44:39

标签: python string parsing

我有一个如下字符串:

"sring = [[61252,'1','1','30000','2617','2677','15000','1'],[61252,'2','2','72590','2615','2678','15000','1'],[61252,'3','1','9354','2608','2690','709','1']]"

我想将其转换为常规列表,如:

list = [[61252,'1','1','30000','2617','2677','15000','1'],[61252,'2','2','72590','2615','2678','15000','1'],[61252,'3','1','9354','2608','2690','709','1']]

然后我可以解析它或做任何可以用列表做的事情。 我试图拆分字符串,但它不起作用,因为结果是一个字符串。

我甚至尝试使用exec函数转换它:

exec('func = lambda : {}; func()').string

但它没有返回任何东西。 有没有(干净的)方法将这种字符串转换为适当的列表?

3 个答案:

答案 0 :(得分:6)

=周围分割字符串后使用literal_eval。请密切关注=后面的额外空格,因为有必要确保literal_eval可以正确处理传递的字符串结构。否则,您将面临IndentationError: unexpected indent

的例外情况

解决方案:

from ast import literal_eval

s = "sring = [[61252,'1','1','30000','2617','2677','15000','1'],[61252,'2','2','72590','2615','2678','15000','1'],[61252,'3','1','9354','2608','2690','709','1']]"

res = literal_eval(s.split('= ')[1])
print(res)
print(type(res))

输出:

[[61252, '1', '1', '30000', '2617', '2677', '15000', '1'], [61252, '2', '2', '72590', '2615', '2678', '15000', '1'], [61252, '3', '1', '9354', '2608', '2690', '709', '1']]
<class 'list'>

额外注意:我注意到您已将示例中的列表分配给名为 list 的变量。请注意, list 是Python中的内置名称,使用它作为变量名称会影响内置函数,并可能导致代码出现问题。

答案 1 :(得分:1)

在你的情况下,你可以像列表一样切片!最终它是字符列表。

x="sring = [[61252,'1','1','30000','2617','2677','15000','1'],[61252,'2','2','72590','2615','2678','15000','1'],[61252,'3','1','9354','2608','2690','709','1']]"

x=x[x.index('['):x[::-1].index(']')*-1])) # if any trailing chars in staring 
  你可以

使用 x = x [x.index(&#39; [&#39;):]

     

这将对您的字符串进行切片,然后您可以使用list_x = eval(x)来获取实际列表

答案 2 :(得分:-2)

只需exec字符串

exec("sring = [[61252,'1','1','30000','2617','2677','15000','1'],[61252,'2','2','72590','2615','2678','15000','1'],[61252,'3','1','9354','2608','2690','709','1']]")