非常简单但令人沮丧......我正在导入已经构建为列表的数据,但无论我尝试python如何将其作为字符串读取。
如何使rank []成为正确的列表而不是字符串?看起来这个数据是如何制定的,这应该是接近自动的,而不是像疯了一样打击我并且排名[0] =“[”
数据集:
['accounting', 5, 9, 11, 0, 0]
['polysci', 1, 2, 24, 0, 0]
脚本:
file = open("sub_ranks.txt","r+")
ranks = []
for line in file:
ranks = line
group = ranks[0]
if ranks[1] >= 15:
print group
f = open("results.txt","a")
f.write(group+"\n")
f.close()
答案 0 :(得分:4)
更好的方法是以不同的格式保存文件,而不是保存python语法。 Python为此提供了许多“电池包含” - 例如,您可以使用json
,或写入csv
文件,或者如果数据不需要,可以使用pickle
是人类可读的。
但是,如果您只是在快速而肮脏的解决方案之后,那么literal eval可以为您提供一个列表:
>>> import ast
>>> s = "['accounting', 5, 9, 11, 0, 0]"
>>> ast.literal_eval(s)
['accounting', 5, 9, 11, 0, 0]
答案 1 :(得分:3)
只是声明ranks=[]
不会将所有期货分配更改为列表对象。
您正在从文件中读取字符串,您可以使用ast.literal_eval
将包含python文字的字符串转换为python对象。
from ast import literal_eval
with open("sub_ranks.txt", "r+") as f:
for line in f:
ranks = literal_eval(line)
- file
是Python2中的内置函数,不要将其用作变量名。
- It is good practice在处理文件对象时使用with
关键字。这样做的好处是,即使在途中引发异常,文件在套件完成后也会正确关闭。
答案 2 :(得分:1)
您正在文本模式下打开文件(默认模式)。因此,所有内容都被读作文本。您有两种选择:手动解析文本数据或使用“二进制”模式并考虑序列化逻辑。
请在此处查看open()函数标志:http://docs.python.org/2/library/functions.html#open