2015-10-01 67 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,我觉得我很近,该死! :))个人计数器只需要在循环内部进行,外部是全局计数器。很好的答案!谢谢 –

相关问题