Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有办法将字符串转换为列表_Python_Variables - Fatal编程技术网

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

Python 有没有办法将字符串转换为列表,python,variables,Python,Variables,我正在将列表保存在文本文件中,并将其转换为字符串。 当我阅读我的列表时,我得到如下字符串: "['layer1', '1', '10', '10', 'pending', 'Pending', '1', '1', '1', [[1, 10]]]" 我想知道是否有一种简单的方法将其转换回列表。 如果这是不可能的,如果有更好的方法来保存它并将其取回 谢谢 我正在使用Python 2.6查看ast.literal\u eval。它应该做你想做的 >>> import ast >

我正在将列表保存在文本文件中,并将其转换为字符串。 当我阅读我的列表时,我得到如下字符串:

"['layer1', '1', '10', '10', 'pending', 'Pending', '1', '1', '1', [[1, 10]]]"
我想知道是否有一种简单的方法将其转换回列表。 如果这是不可能的,如果有更好的方法来保存它并将其取回

谢谢

我正在使用Python 2.6查看ast.literal\u 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]]]
与eval不同,它应该完全安全,不会受到恶意代码的攻击,但它能够读取的对象必须是简单对象string、int、float、None和bools,或者完全由string、int、float、None和bools组成的列表/元组/字典

当然,如果没有必要拥有一个人类可读的数据文件,那么您应该看看其他答案中建议的pickle或json

编辑


我注意到,json很容易让人阅读并查看下面的注释,因此您可能应该使用它。

当然有更好的方法,最突出的是pickle模块:

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

编辑:删除了关于性能的评论,因为事情还没有决定。表明json至少在某些对象上更快。

您可以使用:


你不想用双引号来开始/结束这个字符串吗?否则会有很多字符串。。从语法上讲,这并不令人高兴:是的,这是双引号,你是对的JSON不是人类可读的吗?将单引号切换为双引号,OP的字符串就已经是json了。json将提供两种格式:一种人类可读的文件和一种正常的序列化格式。我认为在任何情况下都不应该使用ast.literal\u eval进行反序列化,如果您可以控制格式的话。@Woobie,我没有意识到这一点。我自己也没有用过json——我只是认为这是一个更快的泡菜update@mgilson-它完全符合我的要求,而且很简单!谢谢again@Ennakard-很好,我很高兴听到它对你有用。祝你好运根据这篇文章,json比pickle快得多。不过,我自己从未做过任何基准测试…@mgilson:与simplejson相比,该基准测试使用的是pickle的纯Python实现,而不是cPickle,而不是与Python捆绑的纯Python json。结果在任何方面都不足为奇。对于cPython和Python捆绑的json,情况正好相反。我假设基准测试将使用cpickle。我想这就是我不认真阅读的结果。我也有点惊讶,没有相应的cjson。非常有趣。谢谢。@mgilson:当然,速度的差异不是因为格式,而是因为实现。在这里,C实现将永远获胜。因为我将许多类似的列表保存在同一个file.txt文件中。pickle或json会比基本的open'file',w和whiting逐行保存我的列表更快吗?阅读时间对我来说并不重要。
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)
In [1]: import json

In [2]: mylist = [1, 2, 3]

In [3]: with open('data', 'w') as fobj:
   ...:     json.dump(mylist, fobj)
   ...:

In [4]: with open('data') as fobj:
   ...:     l = json.load(fobj)
   ...:

In [5]: l
Out[5]: [1, 2, 3]