的ast
模塊提供了一個literal_eval(repr)
功能安全評估任何蟒蛇文字:
>>> import ast
>>> ast.literal_eval("[[1,2,3,4], [5,6,7,8]]")
[[1, 2, 3, 4], [5, 6, 7, 8]]
>>> ast.literal_eval("19e6")
19000000.0
或者,你可以使用json.loads
:
>>> json.loads("[[1,2,3,4,5], [6,7,8,9]]")
[[1, 2, 3, 4, 5], [6, 7, 8, 9]]
的json
解決方案是相當更快到literal_eval
:
In [1]: import ast, json
In [2]: %timeit ast.literal_eval("[[1,2,3,4], [5,6,7,8]]")
10000 loops, best of 3: 33.5 us per loop
In [3]: %timeit json.loads("[[1,2,3,4], [5,6,7,8]]")
100000 loops, best of 3: 4.16 us per loop
In [4]: 33.5/4.16
Out[4]: 8.052884615384615
In [5]: big_list_text = '[{}]'.format(','.join(["[1,2,3,4]"] * 1000))
In [6]: %timeit ast.literal_eval(big_list_text)
100 loops, best of 3: 14.6 ms per loop
In [7]: %timeit json.loads(big_list_text)
1000 loops, best of 3: 485 us per loop
In [8]: 14600/485
Out[8]: 30.103092783505154
正如你可以看到json.loads
比ast.literal_eval
顯著快,雖然他們解析不同的事情,只有在處理簡單列表文字。
'import ast; ast.literal_eval(the_text)' – Bakuriu
是的,謝謝!這樣可行。不幸的是,我只能接受一個答案,因爲一切正確,我會接受第一個發表的。無論如何感謝:) – PepeToro