Python在导入时无法将列表数据识别为列表

时间:2014-01-20 09:50:54

标签: python import

非常简单但令人沮丧......我正在导入已经构建为列表的数据,但无论我尝试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()

3 个答案:

答案 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