2015-10-18 81 views
-1

我可能會在這裏失蹤,如果是這樣,請原諒noob(我是)問題。我正在嘗試遍歷文本文件中的行。第一個for工作正常;然而,第二個for沒有。 print(eachLine)命令不會打印任何內容,並且newY列表的結果是空白列表(因爲它已被初始化)。我所做的所有調試(下面只是最新的)指出第二個for根本沒有被訪問。我在這裏錯過了什麼?Python - 第二'for'循環在功能不起作用

編輯:有一個類似的問題here,但在一個有嵌套循環和錯誤是,用戶指的是在同一文件相同嵌套循環。我試圖從頭開始重新遍歷文件。

import os 
os.chdir ('d:\Documente\python tests') 

def plotRegression(myFile): 
    lineCounter=0 
    sumX=0 
    sumY=0 
    sumXY=0 
    sumX2=0 
    newY=[] 

    for eachLine in myFile: 
     coords=eachLine.split() 
     lineCounter=lineCounter+1 
     sumX=sumX+float(coords[0]) 
     sumY=sumY+float(coords[1]) 
     sumXY=sumXY+float(coords[0])*float(coords[1]) 
     sumX2=sumX2+float(coords[0])**2 

    avgX=sumX/lineCounter 
    avgY=sumY/lineCounter 
    m =(sumXY-lineCounter*avgX*avgY)/(sumX2-lineCounter*avgX**2) 

    for eachLine in myFile: 
     print (eachLine) 
     coords=eachLine.split() 
     newY.append(avgY+m*(coords[0]-avgX)) 

    return (avgX, avgY,sumXY, sumX2, m, newY) 


def Main(): 
    dataFile = open("labdata.txt","r") 
    print (plotRegression(dataFile)) 
    dataFile.close() 


Main() 
+1

請做一個**最簡單的例子**。 sumX/avgX計算中沒有一個與您的問題相關。 –

+2

@MarcusMüller - 發佈時,我不知道問題是什麼,所以我儘可能多地提供了信息。看起來像我有一些額外的提示,因爲這一點。我現在不會編輯這個問題,否則部分答案就沒有意義了。不過,謝謝你指出這一點。 –

+2

你正在提出一個非常有效的觀點:)但請記住:通常,在問問題之前,你會嘗試自己縮小問題的範圍,因此從代碼中移除計算將是我第一次嘗試解決問題。仍然:讓你的評論得到讚揚,因爲它非常明智! –

回答

3

你需要退您的文件中讀取的位置開始,使用file.seek()

myFile.seek(0) 

文件是流;從文件中讀取或寫入文件可將文件指針移至新位置。對文件進行迭代逐行讀取也不例外。讀完文件中的所有行後,文件位置將一直保留,並且重複迭代不會產生任何附加信息。

它會是一個更好的主意來處理從文件中的所有信息,並將其存儲在內存中,閱讀只是一次。與訪問內存中的相同信息相比,文件讀取是一個緩慢的過程。在這種情況下,你只需要使用每行的第一個值;存儲在第一個循環中讀取時:

x_coords = [] 
for eachLine in myFile: 
    x, y = (float(c) for c in eachLine.split()) 
    lineCounter += 1 
    x_coords.append(x) 
    sumX += x 
    sumY += y 
    sumXY += x * y 
    sumX2 += x ** 2 

avgX = sumX/lineCounter 
avgY = sumY/lineCounter 
m = (sumXY - lineCounter * avgX * avgY)/(sumX2 - lineCounter * avgX ** 2) 

for x in x_coords: 
    newY.append(avgY + m * (x - avgX))