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

Python嵌套循环读取CSV文件结果不符合预期的问题

问题原因与解决办法

原因解析

Python里的文件对象是一次性迭代器,遍历的时候会从当前位置逐步读取,直到文件末尾,指针不会自动重置。你的代码执行流程是这样的:

  1. 第一次外层for X in temp:读取文件第一行,打印loop_1
  2. 进入内层for Y in temp:从文件第二行开始读取,把剩下的两行全部读完,所以打印两次loop_2
  3. 此时文件指针已经走到末尾,后续的外层循环再遍历temp时,没有任何内容可读,循环直接结束,自然不会再输出你期望的那些loop_1和loop_2

解决方法

要实现你要的嵌套循环效果,核心是让内层循环每次都能遍历完整的文件内容,而非剩余内容。这里推荐两种可靠的方式:

方式1:提前将文件内容读取到列表(最优)

把文件所有行存入列表后,列表可以被重复遍历,完全满足嵌套循环的需求,同时用with语句自动管理文件,避免资源泄漏:

with open("file.csv", "rt") as file:
    # 读取所有行到列表
    file_lines = file.readlines()

# 外层循环遍历列表的每一行
for _ in file_lines:
    print("loop_1")
    # 内层循环同样遍历整个列表
    for __ in file_lines:
        print("     loop_2")

方式2:每次内层循环前重置文件指针并重新遍历

手动将文件指针移回文件开头,让内层循环能重新读取全部内容,但这种方式需要注意外层循环的遍历逻辑,避免指针位置导致的异常:

file = open("file.csv", "rt")
# 先把所有行读取到列表,用于控制外层循环次数
all_lines = file.readlines()
file.close()

for _ in all_lines:
    print("loop_1")
    # 每次内层循环重新打开文件,确保从头读取
    with open("file.csv", "rt") as inner_file:
        for __ in inner_file:
            print("     loop_2")

或者如果不想重新打开文件,也可以用seek(0)重置指针,但要注意外层循环不能直接遍历原文件对象,而是基于列表控制次数:

file = open("file.csv", "rt")
all_lines = file.readlines()

for _ in all_lines:
    print("loop_1")
    file.seek(0)  # 将指针重置到文件开头
    for __ in file:
        print("     loop_2")

file.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:50:25