【问题标题】:Python - read in a previously 'list' variable from filePython - 从文件中读取以前的“列表”变量
【发布时间】:2013-03-13 19:14:30
【问题描述】:

我之前创建了一个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,以便我可以正常访问每个元素(即如上面的第一个打印语句所示)?

非常感谢

【问题讨论】:

    标签: python string file list


    【解决方案1】:

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

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

    【讨论】:

    • 这很完美!非常感谢,这让我很头疼。考虑一下这个“已解决”!
    【解决方案2】:

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

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

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

    【讨论】:

    • 感谢您的评论和信息。它不一定是 .txt 文件,但我发现 @icktoofay 的响应最有用,并且将在这个特定实例中使用该方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    相关资源
    最近更新 更多