读取存储在文本文件中的列表[重复]

Posted

技术标签:

【中文标题】读取存储在文本文件中的列表[重复]【英文标题】:Reading a list stored in a text file [duplicate] 【发布时间】:2016-07-12 14:55:06 【问题描述】:

我有一个文件,其内容是 python 列表的形式,如下所示:

['hello','how','are','you','doing','today','2016','10.004']

有没有办法将 python 文件读回列表对象?而不是使用.read() 并将整个文件读取为字符串。

编辑:对于那些可能感兴趣的人,我使用 (import ast) 作为上述问题的解决方案遇到了一个奇怪的问题。

我使用的程序有一个功能,可以从 yahoo Finance python 模块中获取历史股票数据。这个函数与使用 ast.literal_eval() 的函数没有任何关系或依赖。

无论如何,每天晚上收市后,我都会从雅虎财经收集新批次的历史数据,昨晚我遇到了一个错误:simplejson.scanner.jsondecodeerror 期望值。

这很奇怪,因为它可以很好地收集某些公司的数据,但会为其他公司抛出错误,有时为同一家公司工作,但一分钟后它就不起作用了。在尝试了各种调试和解决问题后,我记得最近添加了 import ast,并认为我应该尝试看看它是否会产生影响,在删除 import ast 后,程序恢复正常工作。

有人知道为什么 import ast 会导致问题吗? @Apero 为什么您最初警告不要使用 eval 或 ast.literal_eval?

【问题讨论】:

您是否控制文件的保存方式?如果是这样,您必须将列表编写为字符串,您是否可以修改该过程以便您不必处理这种复杂情况 文件是使用 f.write(str(my_list)) 在 python 中创建的 f.write(' '.join(map(str, mylist)))重写文件 @Apero: ['this data', 'would not round trip'] 如果你的文件使用了双引号,你可以使用import json ; data = json.load(open("filename.txt")) 【参考方案1】:

你可以使用ast.literal_eval():

import ast

with open('filename.txt', 'r') as f:
    mylist = ast.literal_eval(f.read())

【讨论】:

永远,永远,永远使用 evalast.literal_eval。这是我开始使用 python 编码时收到的最好建议。 @Apero 在这种情况下这是最好的解决方案... @Apero:为什么不ast.literal_eval?它非常适合这个用例。 同意,但真正的最佳解决方案是重写文件 IMO ;-) @Apero:“永远,永远”是个坏建议。 evalast.literal_eval 是用于特定目的的工具。当您了解它们的工作原理和作用时,就没有理由在适当的情况下避免使用它们。与其说“永远不要使用它们”,不如说“在使用它们之前深入了解”。【参考方案2】:
    将文件从 foo.txt 重命名为 foo.py 在该行前面添加my_list = 在您的代码中:import foo; l = foo.my_list

更简单,不是吗? ;-)

【讨论】:

我知道,我知道,......我要交朋友哈哈哈,但它也可以是一个真正的解决方案。 我需要以编程方式实现它......因为这些文件大约有 7000 个

以上是关于读取存储在文本文件中的列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C#读取文本文件并将值存储在不同的列表中

急求:如何用python删除文本中的重复行?

从文本文件中逐行提取数据并将其存储在python的列表中[重复]

试图在python中读取一个非常大的文本列表[重复]

读取战争档案中的文本文件[重复]

从文件中读取列表列表作为python中的列表列表