Python 3 - 文件中所有数字的总和

时间:2015-04-09 18:43:41

标签: python file

我有一个由许多文件组成的目录,每个文件的格式为:

Vertie,F,5
Wilma,F,17
John,M,11
William,M,15

对于我需要检查特定名称是否出现在特定行号的所有文件。如果确实如此,那么得到'F'的第3列的总和。

我编写了以下代码,但它似乎不起作用:

        f1 = open('abc.txt')
        f2 = open('abc.txt')
        for i, line in enumerate(f1):
            line = line.strip()
            name, sex, count = line.split(',')
            if i == 2 and name == 'Wilma':
                for line in f2:
                    line = line.strip()
                    name, sex, count = line.split(',')
                    if sex == 'F':
                        result += int(count.strip())

关于我哪里出错的提示?

2 个答案:

答案 0 :(得分:1)

你为此使用Python的原因是什么?这在awk

中非常简单
 awk -F, 'BEGIN{sum=0}/Wilma/{sum+=$3} END{print sum}' file1 file2 ...

根据评论进行修改:为了安全起见,您可以明确检查第一个字段是Wilma:

 awk -F, '{if($1=="Wilma"){sum+=$3}} END{print sum}' file1 file2 ...

答案 1 :(得分:0)

如果您想使用任意名称,性别和行号进行此操作;考虑一下:

def verify(filename, line_number, line_name, line_sex, result):
    with open(filename, 'r') as f:
        lines = f.readlines()
        for i, line in enumerate(lines):
            i = i+1
            line = line.strip()
            name, sex, count = line.split(',')
            if not bool(set([i, name, sex]) - set([line_number, line_name, line_sex])):
                result += int(count)
    return result

有了这个,您可以检查名称和性别的任何行。

# starting point
result = 0

# check if line 2 is a female named Wilma
result = verify('abc.txt', 2, 'Wilma', 'F', result)

print(result) # prints 17

您可以使用任何行,名称或性别执行此操作,结果将一直上升,直到您重置为止。