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

时间:2013-03-24 05:49:11

标签: python string file list

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

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

[(['000', '001', '002'], ('010', '011', '012')), (['100', '101', '102'], ('110', '111', '112'))]

如果此列表等于mylist,我可以

>>> print mylist[0]
(['000', '001', '002'], ('010', '011', '012'))
>>> print mylist[0][0]
['000', '001', '002']
>>> print mylist[0][0][2]
002

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

>>>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'"

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

有没有办法读取文件并将其用作list,因此我可以像正常一样访问每个元素(例如上面第一个打印语句中所示)?

非常感谢

2 个答案:

答案 0 :(得分:13)

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

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

答案 1 :(得分:0)

它是否必须是您应用中的纯文本文件?假设您将其正确格式化为Python列表,您可以将其转换为Python代码而不是文本。重命名文件mylist.py并在列表的前面添加mylist = [xxx]之类的作业。

在需要访问此列表的Python脚本中,您可以像from .mylist import mylist一样导入它,这样您就可以开展工作(例如mylist[0]等。)。

上面的导入假定mylist.py和您的Python脚本位于同一个模块中(其中包含__init__.py文件的同一目录)。如果您不清楚(请查看Python modules),只需将整个列表复制到与脚本相同的文件中,然后将分配放在同一文件的顶部。