回答
我会使用literal_eval()
,它是安全的:
安全评估的表达式节点或含有一个Python 表达式的字符串。提供的字符串或节点可能只包含以下Python文字结构中的 :字符串,数字,元组,列表, 字典,布尔值和无。
这可用于安全评估包含来自不受信任源的Python 表达式的字符串,而不需要自己解析 值。
>>> import ast
>>> ast.literal_eval("['first', 'sec', 'third']")
['first', 'sec', 'third']
它没有EVAL任何东西,除了文字表述:
>>> ast.literal_eval('"hello".upper()')
...
ValueError: malformed string
>>> ast.literal_eval('"hello"+" world"')
...
ValueError: malformed string
谢谢alecxe,我一直在使用这个,但我很好奇,想看看人们在想什么,其他方法等。 – Ruth
+1 - 这是最好的方法,因为'ast.literal_eval()'是安全的,相反到'eval()'。也就是说,如果可能的话,最好的选择可能是以更标准化的格式存储数据。 –
如果
他们总是格式化为你说
所有的字符串以同样的方式引用,一个简单的拆分也应该这样做:
"['first', 'sec', 'third']".split("'")[1::2]
该解决方案更脆弱,因为它只支持一个现成的婷的风格。
虽然它速度相当快。
%timeit "['first', 'sec', 'third']".split("'")[1::2]
1000000 loops, best of 3: 726 ns per loop
%timeit ast.literal_eval("['first', 'sec', 'third']")
10000 loops, best of 3: 21.8 us per loop
很酷,但是如果列表是'''''''','sec','third','fourth',''或甚至'L =“”“'''''','sec','第三','第四']“”“' – TerryA
不错的例子。我会让答案生效,我希望它能帮助说明为什么literal_eval是更好的做法。 –
- 1. 字符串常量...最佳实践?
- 2. PHP字符串参数最佳实践
- 3. C - 字符串的最佳实践
- 4. 最佳实践从字符串
- 5. BlackBerry列出最佳实践
- 6. Python最佳实践:“或”或“in”系列?
- 7. 列出对象 - 最佳实践
- 8. 转义XML字符的最佳实践?
- 9. 字符串和运算符:最佳实践,与+
- 10. 最佳实践条件与字符串和数字
- 11. Java列表最佳实践
- 12. 序列号最佳实践
- 13. 最佳实践
- 14. 最佳实践
- 15. 最佳实践
- 16. 最佳实践:
- 17. 最佳实践
- 18. 最佳实践
- 19. 最佳实践
- 20. 最佳实践
- 21. 最佳实践
- 22. 最佳实践
- 23. 最佳实践
- 24. 最佳实践
- 25. 最佳实践
- 26. 最佳实践
- 27. 最佳实践
- 28. 最佳实践
- 29. 最佳实践
- 30. 最佳实践
最好的方法是使用已知的序列化格式,如json。 –