2017-02-03 29 views
0

我正在讀取外部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) 
+0

你肯定有之前或「Y」後沒有空格?我建議剝離它們以防萬一:'if field [6] .strip()==「Y」:...'你也在每次循環迭代中重置行數。這可能不是你想要的。 – DyZ

+0

@Sarah:你不應該改變現有答案無效的方式。請不要編輯代碼,因爲這些問題也可以作爲未來用戶(而不僅僅是你)的參考。請評論我的回答問題,我會盡力幫助您解決問題(根據我的最佳知識) –

+0

您應該編輯代碼以使您的問題清晰明瞭。但改變問題的背景是SO的編輯功能的利用 –

回答

1

您錯誤地使用了sum。與當前的代碼

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

問題:爲了達到理想的效果,你可以用sum作爲替換當前的代碼因爲fileOpen是發電機。您在sum內完全耗盡它,因此您的下一個for迭代沒有發生。相反,使用金額,你可以將for環路初始化之前noLines

noLines = 0 

for line in fileOpen: 
    # your stuff ... 

,取而代之的sum,做到:

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

嗨,我已經這樣做了。在我原來的帖子中看到我編輯的代碼。現在沒有什麼東西可以打印,但計數的行數? –

+0

@SarahProctoer你是否再次使用'fileOpen = open(「file.txt」,「r」)'打開文件? –

+0

@SarahProctoer另外,你應該在for循環之前定義'noLines = 0'。檢查答案(編輯清楚) –

相關問題