Python 添加求和函数时,循环不显示所有行

Python 添加求和函数时,循环不显示所有行,python,python-3.x,loops,sum,Python,Python 3.x,Loops,Sum,我正在读取一个外部txt文件,并显示字段6为Y的所有行。然后我需要计算这些行。但是,当我添加sum函数时,它将只打印1行,如果我删除此sum函数,所有行都会按预期显示。我认为这和for循环有关,但似乎不知道如何显示所有行并保持我的总和。谁能帮我找出哪里出了问题 noLines = 0 fileOpen = open ("file.txt","r") print ("Name: " + "\tDate: " + "\tAge: " + "\tColour: " + "\tPet") for l

我正在读取一个外部txt文件,并显示字段6为Y的所有行。然后我需要计算这些行。但是,当我添加sum函数时,它将只打印1行,如果我删除此sum函数,所有行都会按预期显示。我认为这和for循环有关,但似乎不知道如何显示所有行并保持我的总和。谁能帮我找出哪里出了问题

noLines = 0

fileOpen = open ("file.txt","r")
print ("Name: " + "\tDate: " + "\tAge: " + "\tColour: " + "\tPet")

for line in fileOpen:
    line = line[:-1]
    field = line.split(',')

    if field[6] == "Y":
        print()
        print (field[0] +"\t\t" + field[1] + "\t" + field[2] + "\t\t" + field[3] + "\t\t" + field[4])

        noLines = sum(1 for line in fileOpen)

print ()
print(noLines)

您使用的
sum
不正确。为了获得所需的结果,您可以将当前代码替换为
sum
,如下所示:

noLines = sum(1 for l in open("file.txt","r") if l[:-1].split(',')[6]=='Y')

当前代码问题:因为
fileOpen
是一个生成器。您正在
sum
中完全耗尽它,因此您的下一次
for
迭代不会发生。您可以在
for
循环之前初始化
noline
,而不是使用sum,如下所示:

noLines = 0

for line in fileOpen:
     # your stuff ...
而不是求和,而是执行以下操作:

noLines += 1
# instead of: noLines = sum(1 for line in fileOpen)

嗨,我已经做到了。在我的原始帖子中查看我编辑的代码。现在没有打印行数?@SarahProctoer您是否再次使用
fileOpen=open(“file.txt”,“r”)
打开文件?@SarahProctoer同样,您应该在
之前为
循环定义
noline=0
。签入答案(编辑以使其清晰)确定现在全部显示。但是行的计数是错误的,它只是给了我一行作为计数,而它应该是60+。检查我的最后一条评论你确定在“Y”之前或之后没有空格吗?我建议去掉它们,以防万一:
if字段[6]。strip()=“Y”:…
您还可以重置每个循环迭代中的行数。这可能不是你想要的。@Sarah:你不应该改变问题,因为它会使现有答案无效。请不要编辑代码,因为这些问题也可以作为未来用户(不仅仅是您)的参考。请评论我对这个问题的回答,我会尽力帮助你解决这个问题(据我所知),你应该编辑代码,使你的问题清晰明了。但改变问题的背景是利用SO的编辑功能