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

遇ValueError: I/O operation on closed file: csvreader,已获权限求解决

排查你的CSV读取错误问题

嘿,我来帮你分析这个ValueError: I/O operation on closed file的问题,还有你代码里的逻辑小bug:

为什么会出现这个错误?

最可能的原因是代码缩进错误:如果你的第二个for row in reader循环没有缩进在with代码块内部,那当with块执行完毕后,系统会自动关闭文件f,这时候再用依赖这个文件的csv.reader,自然会触发“操作已关闭文件”的报错。

另外,就算缩进没问题,你的代码逻辑本身也走不通:csv.reader返回的是一次性迭代器,第一次for row in reader循环已经把所有行都遍历完了,文件指针直接跳到末尾,第二个循环根本读不到任何内容,没法拿到最后一行。

怎么修正?

给你两种简单的修正方案,按需选择:

方案1:直接记录最后一行(效率最高)

不用绕弯子统计行数,遍历的时候直接更新最后一行的记录就行,循环结束后剩下的就是最后一行:

import csv

# 注意路径前面加r,避免Windows反斜杠的转义问题
with open(r'C:\Users\legos\OneDrive\Desktop\firebase.csv', 'rt') as f:
    reader = csv.reader(f, delimiter=',')
    lasturl = None
    for row in reader:
        lasturl = str(row)  # 每次循环都覆盖,最后保存的就是最后一行数据
    if lasturl:  # 避免文件为空的情况
        print(lasturl)

方案2:先把所有行存成列表(适合需要多次访问行数据的场景)

如果之后还要用到其他行的数据,可以先把所有行转成列表,这样就能随便访问任意行了,包括最后一行:

import csv

with open(r'C:\Users\legos\OneDrive\Desktop\firebase.csv', 'rt') as f:
    reader = csv.reader(f, delimiter=',')
    rows = list(reader)  # 把迭代器转成列表,可重复访问
    if rows:
        lasturl = str(rows[-1])  # 直接取列表最后一个元素
        print(lasturl)

另外提醒下:Windows路径里的反斜杠\要特别注意,要么用原始字符串(前面加r),要么把反斜杠改成\\,不然像\U这种会被当成Unicode转义字符,导致路径解析失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:29:16