2017-10-08 69 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)是你需要閱讀文本行。