Python:具有多个args的函数中的计数器

时间:2015-10-01 13:24:40

标签: python

使用函数输入任意数量的文本文件作为args。功能是计算每个文件的行,单词和字符,以及总计数:

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个文件,并且所有文件的计数器都相同。我如何将计数器分开来单独打印每个文件的统计信息?

1 个答案:

答案 0 :(得分: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,然后只需对循环中使用的变量使用不同的名称。