Python3使用文件

2024-04-25 19:03:04 发布

您现在位置:Python中文网/ 问答频道 /正文

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

name,sex,number

例如:

xyz,M,234

我只需要在第2行出现特定名称并且sex为“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)

我的代码有什么问题。我只需要我的第三列性的总和='F'只有那些文件在哪里

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

Tags: and文件namein目录forifcount
1条回答
网友
1楼 · 发布于 2024-04-25 19:03:04

好吧,首先,你在同一个文件上迭代两次,这肯定会把结果搞砸。你知道吗

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

以及

            for line in file:

这里的部分问题是,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)

相关问题 更多 >