2014-10-07 60 views
-1

我正在學習python。這是我用來將文本文件讀入列表的一個小測試程序。這是文本文件:在Python中讀取文本文件到列表中

42 1 
35 5 
50 2 
41 6 
42 3 
48 4 

這是我的代碼:

score = []; 

for i in range(0, 51): 
    score.append(0); 

f = open("test1.txt", "r"); 

for line in f: 
    a, b = map(int, f.readline().split()); 
    score[a] = score[a] + b; 

print(score); 

我試圖模仿C++中的數組列表。從文本文件中讀取每一行,該行的第一個數字是列表中將保存第二個數字值的位置。由於某些原因,該計劃正在跳過第1,3,5行。這是我運行程序時的結果。

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 4, 0, 0] 

它應該是

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 6, 4, 0, 0, 0, 0, 0, 4, 0, 2] 

任何想法,我可能會做錯了?這是Python 3

+2

什麼跟所有的分號的? – khelwood 2014-10-07 21:29:41

+2

作爲一個方面說明:'score = [0代表範圍(51)]中的i'或者只是'score = [0] * 51'將是一個更簡單的創建51個零的數組的方法。 – abarnert 2014-10-07 21:30:44

回答

3

當你編寫for line in f:時,它遍歷整個文件,一次只讀一行。

然後,在該循環中,您將忽略line,而改爲f.readline(),它會讀取下一行。

因此,您讀取第0行,忽略它,讀取第1行並對其進行處理。然後閱讀第2行,忽略它,閱讀第3行,並處理它。等等。

只需使用line而不是f.readline(),一切都會好的。

+0

現在我在a,b = map(int,line()。split())上有個問題 TypeError:'str'對象不可調用 – 2014-10-07 22:16:18

+1

@NguyenTran:是的,那是因爲你試圖調用'line' ,這是一個字符串,就像它是一個函數一樣。只要做'line',而不是'line()'。 – abarnert 2014-10-07 22:29:24

+0

我非常感謝 – 2014-10-07 22:34:55

2

readline()調用是問題。您正在迭代每行for line in f,但每次循環時,您都會讀取一個額外的行與readline(),因此它只能讀取其他所有行。

1

在Python中,如果通過將文件與迭代for each循環,那麼你可以使用迭代值:

a, b = map(int, line.split());