You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:34:49