Python3-使用文件
我的目录中有100多个文件,每个文件有1000多行,格式如下: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
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)