Python - 从文件中读入先前的"list"变量

Dr.*_*nes 5 python string file list

我之前创建了一个list并将其保存到文件'mylist.txt'.但是,当我读它时,它是一个字符串,这意味着我不能像我喜欢的那样访问每个元素.我一直在努力寻找解决这个问题的方法,但无济于事.

在文本文档中,列表是一行,看起来像:

[(['000', '001', '002'], ('010', '011', '012')), (['100', '101', '102'], ('110', '111', '112'))]
Run Code Online (Sandbox Code Playgroud)

所以,如果这个名单相等mylist,我就能做到

>>> print mylist[0]
(['000', '001', '002'], ('010', '011', '012'))
>>> print mylist[0][0]
['000', '001', '002']
>>> print mylist[0][0][2]
002
Run Code Online (Sandbox Code Playgroud)

等等

以上内容对我很有用,但在列表中阅读会产生以下影响:

>>>myreadlist=open("mylist.txt",'r').read()
>>>myreadlist
"[(['000', '001', '002'], ('010', '011', '012')), (['100', '101', '102'], ('110', '111', '112'))]"
>>>myreadlist[0]
'['
>>>print myreadlist[0]
[
>>>myreadlist[:15]
"[(['000', '001'"
Run Code Online (Sandbox Code Playgroud)

我知道格式mylist很糟糕,但它适用于我想要的东西,并且生成它需要很长时间.我已经尝试过将列表复制粘贴到python之类mylist = <paste>,但是列表太长了我得到了内存错误.

有没有办法读取文件并使用它作为一个list所以我可以像正常一样访问每个元素(即如上面的第一个打印语句所示)?

非常感谢

ick*_*fay 13

将字符串传递给ast.literal_eval.它会安全地将字符串解析为适当的结构:

>>> import ast
>>> with open("file.txt", 'r') as f:
        data = ast.literal_eval(f.read())
>>> # You're done!
Run Code Online (Sandbox Code Playgroud)