有没有办法将字符串转换为列表

Enn*_*ard 0 python variables

我将我的列表保存在一个文本文件中,将其转换为字符串.当我读到我的列表时,我得到一个这样的字符串:

"['layer1', '1', '10', '10', 'pending', 'Pending', '1', '1', '1', [[1, 10]]]"
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种简单的方法将其转换回列表.如果这是不可能的,如果有更好的方法来保存并取回它?

谢谢!

(我正在使用Python 2.6)

Sve*_*ach 8

肯定有更好的方法,最突出的是pickle模块:

import cPickle as pickle

# Saving
with open("a.file", "w") as f:
    pickle.dump([1, 2, "Hello!"], f)

# Reading
with open("a.file") as f:
    obj = pickle.load(f)
Run Code Online (Sandbox Code Playgroud)

与Python的json模块相比,cPickle更灵活.另一方面,JSON为您提供了一个人类可读的文件.如果它能够序列化您的对象,请转到JSON,因为cPickle不能用于不受​​信任的数据.

编辑:删除了关于性能的评论,因为事情有点不确定. ms4py的这个迷你基准测试表明,json至少在某些对象上更快.


mgi*_*son 6

看看ast.literal_eval.它应该做你想要的.

>>> import ast
>>> sss="['layer1', '1', '10', '10', 'pending', 'Pending', '1', '1', '1', [[1, 10]]]"
>>> ast.literal_eval(sss)
['layer1', '1', '10', '10', 'pending', 'Pending', '1', '1', '1', [[1, 10]]]
Run Code Online (Sandbox Code Playgroud)

这应该是完全安全的恶意代码(不像eval),但它能够读取的对象必须是简单的对象(字符串,整数,浮点数,无和bools或列表/元组/字典完全由字符串,整数,浮点组成,无和布尔).

当然,如果没有必要使用人类可读的数据文件,您应该查看picklejson按照其他答案的建议.

编辑

它引起了我的注意,json人类很容易阅读(见下面的评论),所以你应该使用它.