读取存储在文本文件中的列表

14

我有一个文件,其内容以Python列表的形式呈现,例如以下内容:

['hello','how','are','you','doing','today','2016','10.004']
有没有办法将Python文件读入列表对象中,而不是使用`.read()`并将整个文件读取为字符串?
编辑:对于那些可能感兴趣的人,我遇到了一个奇怪的问题,使用(import ast)作为上述问题的解决方案建议。
我在程序中使用了一个函数,该函数从雅虎金融Python模块中获取历史股票数据。这个函数与使用ast.literal_eval()的函数没有任何关系或依赖关系。
无论如何,在每天收盘后,我都会从雅虎金融收集新的批次历史数据,昨晚我遇到了一个错误:simplejson.scanner.jsondecodeerror expecting value。
这很奇怪,因为它能够为一些公司正确地收集数据,但对于其他公司则会抛出错误,并且有时会为相同的公司工作,但一分钟后就不起作用。尝试各种调试和解决问题的方法后,我想起最近添加了导入ast,并想知道它是否会产生影响。删除import ast后,程序恢复正常工作了。
有人知道为什么导入ast会引起问题吗? @Apero 为什么您最初警告不要使用eval或ast.literal_eval?

你能控制文件保存的方式吗?如果可以,你需要将列表写成字符串,你能修改这个过程,以避免处理这种复杂性吗? - PyNEwbie
文件是使用Python创建的,使用f.write(str(my_list))写入。 - Mustard Tiger
使用以下代码重写文件:f.write(' '.join(map(str, mylist))) - DevLounge
@Apero: ['这个数据', '不会往返'] - Steven Rumbalski
1
如果您的文件使用双引号,您可以使用import json; data = json.load(open("filename.txt")) - drootang
显示剩余2条评论
2个回答

23
你可以使用 ast.literal_eval()
import ast

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

永远不要使用“eval”或“ast.literal_eval”。这是我开始编写Python代码时收到的最好建议。 - DevLounge
12
@Apero说“永远不要,绝对不要”是错误的建议。evalast.literal_eval是具有特定目的的工具。如果您了解它们的工作原理和作用,就没有理由在适当的情况下避免使用它们。不要说“永远不要使用它们”,而是说“在使用之前获得深入的了解”。 - Bryan Oakley

15
  1. 将文件从原名foo.txt重命名为foo.py
  2. 在那行代码前面添加my_list =
  3. 在你的代码中: import foo; l = foo.my_list

简单易懂,不是吗?;-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接