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

Python中使用enumerate遍历文件行时如何获取index+1对应的下一行

问题解决方案

报错根因

你写的next_line = line(index + 1)存在两个核心问题:

  • line是每次遍历拿到的当前行字符串对象,不是可调用的函数/方法,使用括号传参调用必然会触发类型错误
  • 所有行的内容已经提前全部读取存入lines列表中,要取下一行应该从lines列表根据索引取值,而非操作当前行的line变量

取索引时需要注意边界问题:遍历到最后一行时index+1会超过lines列表的最大索引,需要做越界判断。

修正后的代码

import sys

with open(sys.argv[1]) as f1:
    with open(sys.argv[2], 'a') as f2:
        lines = f1.readlines()
        prev_line = ""
        string_length = 60
        total_lines = len(lines)
        for index, line in enumerate(lines):
            # 边界判断:最后一行无下一行时默认赋值为空字符串
            next_line = lines[index + 1] if index < total_lines - 1 else ""
            print(f'Index is {index + 1}')
            # 后续可正常使用next_line做前瞻判断

可选优化方案

如果你使用的是Python 3.10及以上版本,可以用itertools.pairwise直接遍历相邻行对,不需要手动处理索引,代码更简洁:

import sys
from itertools import pairwise

with open(sys.argv[1]) as f1:
    with open(sys.argv[2], 'a') as f2:
        lines = f1.readlines()
        string_length = 60
        # 遍历相邻的(当前行, 下一行)对,最后一行无下一行不会被遍历
        for index, (curr_line, next_line) in enumerate(pairwise(lines)):
            print(f'Index is {index + 1}')
            # 业务逻辑处理
        # 若需要单独处理最后一行,可单独取lines[-1]操作

如果处理的是超大文件,不想一次性把所有行加载到内存,可以用迭代器逐行读取,避免内存占用过高:

import sys

with open(sys.argv[1]) as f1, open(sys.argv[2], 'a') as f2:
    prev_line = ""
    try:
        curr_line = next(f1)
        for next_line in f1:
            # 处理当前行和下一行的逻辑
            print(curr_line, next_line)
            prev_line = curr_line
            curr_line = next_line
        # 单独处理最后一行
        print("最后一行:", curr_line)
    except StopIteration:
        # 文件为空的异常处理
        pass

内容的提问来源于stack exchange,提问作者user3324136

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:45:01