我有一个由许多文件组成的目录,每个文件的格式为:
Vertie,F,5
Wilma,F,17
John,M,11
William,M,15
对于我需要检查特定名称是否出现在特定行号的所有文件。如果确实如此,那么得到'F'的第3列的总和。
我编写了以下代码,但它似乎不起作用:
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())
关于我哪里出错的提示?
答案 0 :(得分:1)
你为此使用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 ...
答案 1 :(得分:0)
如果您想使用任意名称,性别和行号进行此操作;考虑一下:
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
您可以使用任何行,名称或性别执行此操作,结果将一直上升,直到您重置为止。