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
相关产品推荐
相关产品推荐

