Python3-使用文件

Python3-使用文件,python,file,Python,File,我的目录中有100多个文件,每个文件有1000多行,格式如下: name,sex,number 例如: xyz,M,234 我只需要在第2行出现特定名称且性别为“F”的情况下获取这些文件的数字字段的总和。但是在检查了条件之后,我的代码给出了目录中所有文件的数字总和字段。这是我的密码: total = [] for filename in os.listdir(direc): result = 0 if filename.endswith('.txt'): f

我的目录中有100多个文件,每个文件有1000多行,格式如下:

name,sex,number
例如:

xyz,M,234
我只需要在第2行出现特定名称且性别为“F”的情况下获取这些文件的数字字段的总和。但是在检查了条件之后,我的代码给出了目录中所有文件的数字总和字段。这是我的密码:

total = []

for filename in os.listdir(direc):
    result = 0
    if filename.endswith('.txt'):
        file = open(direc + '/' + filename, 'r')
        for i, line in enumerate(file, 1):
            line = line.strip()
            name, sex, count = line.split(',')
            if 'xyz' == name and sex == 'F' and i == 2:
                for line in file:
                    line = line.strip()
                    name, sex, count = line.split(',')
                    if sex == 'F':
                        result += int(count)
            total.append(result)
我的代码有什么问题。我只需要我的第三列的sex='F'的总和,只有那些

'xyz' == name and sex == 'F' and i == 2

首先,在同一个文件上迭代两次,这肯定会把结果搞砸

for i, line in enumerate(file, 1):

这里的部分问题是,一个文件对象不是一个全部在内存中的列表——它是一个迭代器,一旦你看到一行,它就消失了。只需使用一个列表将所有行拉入内存--
lines=list(file)
,检查第二行是否符合您的条件--
'xyz',F'==lines[1]。拆分(',')[:2]
--如果是真的,则对整个列表执行操作

对于单个文件:

with open(filename) as f:
    lines = list(f)

if 'xyz', 'F' == lines[1].split(',')[:2]:
    result = 0
    for line in lines:
        name, sex, count = line.strip().split(',')
        if sex == "F":
            result += int(count)
可能重复的
with open(filename) as f:
    lines = list(f)

if 'xyz', 'F' == lines[1].split(',')[:2]:
    result = 0
    for line in lines:
        name, sex, count = line.strip().split(',')
        if sex == "F":
            result += int(count)