读取存储在文本文件中的列表[重复]
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())
【讨论】:
永远,永远,永远使用eval
或 ast.literal_eval
。这是我开始使用 python 编码时收到的最好建议。
@Apero 在这种情况下这是最好的解决方案...
@Apero:为什么不ast.literal_eval
?它非常适合这个用例。
同意,但真正的最佳解决方案是重写文件 IMO ;-)
@Apero:“永远,永远”是个坏建议。 eval
和 ast.literal_eval
是用于特定目的的工具。当您了解它们的工作原理和作用时,就没有理由在适当的情况下避免使用它们。与其说“永远不要使用它们”,不如说“在使用它们之前深入了解”。【参考方案2】:
-
将文件从 foo.txt 重命名为 foo.py
在该行前面添加
my_list =
在您的代码中:import foo; l = foo.my_list
更简单,不是吗? ;-)
【讨论】:
我知道,我知道,......我要交朋友哈哈哈,但它也可以是一个真正的解决方案。 我需要以编程方式实现它......因为这些文件大约有 7000 个以上是关于读取存储在文本文件中的列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章