Python如何读取文件中的成对行并执行数据运算?
如何在Python中读取文件的成对行并执行运算
问题描述
我想要读取文件中的成对行并对其执行运算操作,比如计算每组数字的总和并关联对应的人名。我已经有了一段读取部分行的代码,但不知道如何扩展到处理整个偶数行的文件(比如20行分成10组)。输入文件的行数始终是偶数。
现有代码:
import sys input = sys.stdin favouriteNumbersInput = [] with open("test.txt", 'r') as infile: lines_gen = islice(infile, 2) for line in lines_gen: favouriteNumbersInput.append(line.strip(' ').strip('\n')) firstName,lastName = map(str,line.split(" ")) favouriteNumbers = list(map(int, favouriteNumbersInput))
输入示例:
3, 1, 5, 2 John Doe 5, 1, 6, 7 Jane Doe
期望输出示例:
Sum of favourite numbers for John Doe: 11 Sum of favourite numbers for Jane Doe: 19
解决方案
要处理这种成对行的需求,咱们可以循环读取文件,每次取出两行作为一组来处理,这里给你两种实用的实现方式:
方法一:用itertools.islice逐组读取
利用文件对象本身是迭代器的特性,咱们可以用islice每次从文件里取2行,直到文件读完:
from itertools import islice def process_paired_lines(file_path): with open(file_path, 'r') as infile: # 持续循环取行,直到没有更多内容 while True: # 取出当前组的两行,islice会自动处理到文件末尾的情况 group_lines = list(islice(infile, 2)) if not group_lines: break # 没有行可取时退出循环 # 处理第一行:解析数字列表并求和 nums_str = group_lines[0].strip() favourite_numbers = [int(num.strip()) for num in nums_str.split(',')] total_sum = sum(favourite_numbers) # 处理第二行:获取人名 full_name = group_lines[1].strip() # 输出结果 print(f"Sum of favourite numbers for {full_name}: {total_sum}") # 调用函数处理你的test.txt文件 process_paired_lines("test.txt")
方法二:手动迭代文件对象
如果不想依赖itertools,也可以手动用迭代器的方式读取两行:
def process_paired_lines(file_path): with open(file_path, 'r') as infile: lines_iter = iter(infile) try: while True: # 先读数字行,再读人名行 nums_line = next(lines_iter).strip() name_line = next(lines_iter).strip() # 解析数字并求和 favourite_numbers = [int(num.strip()) for num in nums_line.split(',')] total_sum = sum(favourite_numbers) # 打印结果 print(f"Sum of favourite numbers for {name_line}: {total_sum}") except StopIteration: # 当迭代到文件末尾时会触发这个异常,直接跳过即可 pass process_paired_lines("test.txt")
关键点说明
- 两种方法都是基于每次处理两行的逻辑,因为你说输入文件行数肯定是偶数,所以不用担心有单独的行剩下。
- 数字行的处理:用逗号拆分字符串后,每个元素先去掉多余空格再转成整数,最后直接用
sum()求和就好。 - 人名行:直接去掉首尾的空白字符就能用,不用拆分(除非你需要单独处理名和姓,但你的输出示例里是用全名,所以直接用就行)。
- 用
with语句打开文件是好习惯,它会自动帮你关闭文件,避免资源泄漏。
运行上面的代码,就能得到你想要的输出结果啦~
内容的提问来源于stack exchange,提问作者PKconversion
相关产品推荐
相关产品推荐

