2014-11-02 29 views
0

我使用下面的代碼從文件中讀取:閱讀Python中的文件並創建一個列表原來是一個空列表

G={} 
for line in fin: # load data, create adj lists 
    lst=[] 
    size= len(line) 
    i=0 
    while (i<size): 
     if line[i] in ' \t\r\n': pass 
     else: 
      lst.append(int(line[i:i+2].strip())) 
      i=i+1 
     i=i+1 
    G[lst[0] ]=lst[1:] 

print(G) 

但摹總是原來是空的「foo1,TXT 「包含以下數據:

1 15 
2 6 10 
3 10 
4 9 
5 
+2

如果'G'是* *總是空的,那麼你的'for'循環體永遠不會執行。這反過來就意味着'fin'是* empty *或者在你到達你在這裏展示的代碼之前已經迭代到最後。 – 2014-11-02 13:39:27

+0

剛剛使用該代碼和確切的文件數據進行了測試。對我來說工作得很好。 – 2014-11-02 13:43:20

回答

0

試試這個,它最Python的,我認爲:

fin = open("foo1.txt") 
G={} 
for line in fin: # load data, create adj lists 
    lst = line.split() 
    lst = [int(x) for x in lst] 
    G[lst[0] ]=lst[1:] 
print(G) 
+0

這不會將值轉換爲整數。這可能是對現有代碼的一種改進,但當沒有反覆進行*時,將無法更好地工作*。 – 2014-11-02 13:42:12

+0

'lst = map(int,line.split())'會更好,或者對於Python 3'lst = [int(v)for v in line.split()]'。 – 2014-11-02 13:42:47

+0

您對編輯後的代碼沒有注意到正在進行轉換。 – 2014-11-02 13:45:52

1

我已經writen alternte代碼附加數據從文件列表中,您可以參考,如果你想驗證碼:

f = open('filename') 

    dic = [] 

    for l in f: 

     v = l.split(' ') 
     v= map(lambda s: s.strip(), v) 


     dic=dic+v 


    print dic 

輸出:

['1', '15', '2', '6', '10', '3', '10', '4', '9', '5', ''] 
相關問題