我的目录中有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
答案 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)