函数中的Python第二个'for'循环不工作

2024-09-25 08:32:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我可能错过了这里显而易见的,如果是这样,请原谅noob(我是)的问题。我正在尝试遍历文本文件中的行。第一个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()

Tags: forcoordsfloatmyfileprintdatafileeachlinenewy
1条回答
网友
1楼 · 发布于 2024-09-25 08:32:26

您需要使用^{}将文件读取位置倒带到开头:

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))

相关问题 更多 >