2015-10-01 81 views
0

處理函數以輸入任意數量的文本文件作爲參數。功能是計算行,字和字符的每個文件,以及一個總數:Python:具有多個參數的函數中的計數器

lines = words = chars = 0 

def cfunc(folder, *arg): 
    global lines, words, chars 

    for x in arg: 
     with open("{}{}".format(folder, x), "r") as inp: 
      for line in inp: 
       lines += 1 
       words += len(line.split(" ")) 
       chars += len(line) 
     print(x, lines, words, chars) 

cfunc("C:/", "text1.txt", "text2.txt", "text3.txt") 

計數器是第一個文件是正確的。對於第三個計數器本質上顯示了所有3個文件中的行/字/字符的總數。據我瞭解,這是因爲inp一起讀取所有3個文件,並且計數器在所有文件中都是相同的。我怎樣才能分開計數器來分別打印每個文件的統計信息?

+4

你爲什麼使用'global' ?!這是明確的**完全相反,你說你想要的行爲。如果您將'lines = words = chars = 0' *放入循環*中,您將分別獲得每個文件的計數。 – jonrsharpe

+0

你爲什麼在這裏使用全球? – acushner

回答

1

首先,你需要重新設置統計信息,每個文件:

for x in arg: 
    lines = words = chars = 0 
    with open("{}{}".format(folder, x), "r") as inp: 
     ... 

二,讓你需要使用獨立的變量,因爲你現在重置變量每次迭代總數:

total_lines = total_words = total_characters = 0 

def cfunc(folder, *arg): 
    global total_lines, total_words, total_chars 

    for x in arg: 
     ... 
     print(x, lines, words, chars) 
     total_lines += lines 
     total_words += words 
     total_chars += chars 

當然,你能說出你的全局變量lineswordschars如果你想,那麼你只需要爲你的循環內使用的變量,使用不同的名稱。

+0

A,我覺得我很近,該死! :))個人計數器只需要在循環內部進行,外部是全局計數器。很好的答案!謝謝 –

相關問題