2017-10-08 83 views
0

我试图访问两个列表中的元素,他们都在列表中。最后一个列表(包含另外两个列表)位于文件中。列表从文件索引

当我从我的文件打印大列表时,它看起来像:['[0,1],[2,3]'],它被称为rader。

rader = ['[0,1],[2,3]'] 

我想打印大名单中的元素用下面的命令: print(rader[0][0])应该给我多少0吧?但是当我这样做时,我得到一个错误:'IndexError:列表索引超出范围'。

我认为问题是,当我打开带有列表的txt.file并从中读取(file = open('eddie.txt','r'))时,它将整个事物解释为字符串!这就是为什么我无法达到列表中的元素?

我希望它像[[0,1],[2,3]]而不是['[0,1],[2,3]']来自txt.file(我认为?) How我要这样做吗?

这里是我的代码:

from Tv_LABB2 import * 


fil = open('edvin.txt','r', encoding = 'UTF-8') 

rader = [] 

rad = fil.readline() 

while rad !='': 

    rader.append(rad) 
    rad = fil.readline() 

fil.close() 

fil = open('edvin.txt') 

print(rader) (this is == ['[0,1],[2,3]']) 

fil.close() 



tv1 = TV('VardagsrumsTV',str(rader[0]),str(rader[1]))    

tv2 = TV('KöksTv',str(rader[2]),str(rader[3])) 

正如你可以看到林进口的一些功能从另一个文件,该代码doesn't运行没有它,但我想你明白我的问题!

+0

你最初创建了这个文件吗?在这种情况下,您可以从源头消除问题。 – roganjosh

+0

你能告诉我们该文件的内容是什么样子吗?我的猜测是,一条典型的线看起来像......'[0,1],[2,3] \ n' –

+0

是的,我做到了!当我打开我的txt文件时,它包含以下[[0,1],[2,3]]而不是['[0,1],[2,3]']。否则我会抹掉这个'',或者你是什么意思? - @roganjosh – SimpleMinded

回答

0

你需要让rader列表rader = [[0,1],[2,3]]列表不是一个字符串列表

使用不rader = ['[0,1],[2,3]']

+0

问题不明确,但我认为这是说明'print'的输出,而不是OP如何创建列表。 – roganjosh

0

你可以转换使用ast

>>> rader = ['[0,1],[2,3]'] 
>>> import ast 
>>> r = list(ast.literal_eval(rader[0])) 
>>> r 
[[0, 1], [2, 3]] 
>>> print r[0][0] 
0 
0

读取文件总是产生字节或字符串。如果你想Python的数据结构,你必须做出来。显然,有很多工具可以做到这一点:最简单的(但usually inadvisable)是eval。有一个更安全的变种叫做ast.literal_eval

还有其他选择涉及更改磁盘格式。您可以使用空格来分隔值,并使用str.split等列表来创建列表,或者您可以(如果您的数据来自另一个Python进程)使用pickle

此外,一个简化:rader=list(fil)是你需要阅读文本行。