6

我之前创建了一个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不好,但它适用于我想要的,并且需要很长时间才能生成它。我尝试将列表复制粘贴到 python like mylist = <paste>,但是列表太长并且出现内存错误。

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

非常感谢

4

2 回答 2

16

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

>>> import ast
>>> with open("file.txt", 'r') as f:
        data = ast.literal_eval(f.read())
>>> # You're done!
于 2013-03-24T05:52:31.840 回答
0

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

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

上面的导入假设mylist.py和你的 Python 脚本在同一个模块中(同一个目录,__init__.py里面有一个文件)。如果您不清楚(查看Python 模块),只需将整个列表复制到与您的脚本相同的文件中,然后在同一文件的顶部进行分配。

于 2013-03-24T05:59:35.193 回答