Python 3 - 使用文件

时间:2015-04-10 03:29:21

标签: 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'):
        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)

我的代码出了什么问题。我只需要将我的第3栏的总和用于性别=' F'只有那些

的文件
'xyz' == name and sex == 'F' and i == 2

1 个答案:

答案 0 :(得分:0)

嗯,对于初学者来说,你在同一个文件上重复两次,这肯定会搞砸你的结果。

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

            for line in file:

这里的一部分问题是文件对象不是列在内存中的所有内容 - 它是一个迭代器,一旦你看到一行,它就是'走了只需使用列表 - lines = list(file)将所有行拉入内存,检查第二行是否符合您的条件 - 'xyz', 'F' == lines[1].split(',')[: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)