Python - 第二个'用于'循环功能不起作用

时间:2015-10-18 09:55:41

标签: python for-loop

我可能会错过这里显而易见的事情,如果是这样,请原谅那个菜鸟(我是)的问题。我试图遍历文本文件中的行。第一个for工作正常;但是,第二个for没有。 print(eachLine)命令不打印任何内容,newY列表的结果是空白列表(因为它已初始化)。我所做的所有调试(下面只是最新的)都指出第二个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 个答案:

答案 0 :(得分: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))