Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3-文件中所有数字的总和_Python_File - Fatal编程技术网

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

Python 3-文件中所有数字的总和,python,file,Python,File,我有一个由许多文件组成的目录,每个文件的格式如下: Vertie,F,5 Wilma,F,17 John,M,11 William,M,15 对于所有文件,我需要检查特定的名称是否出现在特定的行号上。如果是,则得到第3列“F”的和 我已经编写了以下代码,但似乎不起作用: f1 = open('abc.txt') f2 = open('abc.txt') for i, line in enumerate(f1): line

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

Vertie,F,5
Wilma,F,17
John,M,11
William,M,15
对于所有文件,我需要检查特定的名称是否出现在特定的行号上。如果是,则得到第3列“F”的和

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

        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())

关于我哪里出了问题,有什么建议吗?

您为什么要使用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 ...

如果您想对任意名称、性别和行号执行此操作;考虑这一点:

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

您可以对任何行、名称或性别执行此操作,结果将持续上升,直到您重置它。

代码似乎没有多大意义。。。为什么
Wilma
是硬编码的?为什么你要用两个迭代器对你的文件进行迭代?你能比“它似乎不起作用”更具体一点吗?请重新回答这个问题。示例输入和输出可能会有所帮助。“检查特定名称是否出现在特定行号处。如果出现,则获取“F”第3列的总和”-抱歉,这并不意味着什么。@CommuSoft我正在尝试查看文件第2行是否有一个名为“Wilma”的字符串。如果存在,则获取第3列的总和,其中sex='F'可能使用
^
标识符作为
Wilma
?人们永远不知道是否添加了其他列(如姓氏)。