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

读取csv标注裁剪图片时出现Input/output error报错如何解决

图片裁剪I/O错误解决方案

核心报错原因

  • 图片资源句柄未正确释放:当前代码用Image.open()打开图片后没有显式关闭,循环中对同一路径先读后写时,系统会判定文件仍被占用,触发I/O冲突。
  • 裁剪坐标类型不兼容:CSV中导出的xmin/ymin等坐标是浮点类型,部分版本的PIL库要求crop方法传入整数像素值,类型不匹配可能引发写入异常。
  • 直接覆盖原文件的读写冲突:在文件仍被读取占用时直接写入同路径,会触发系统层面的I/O限制。

修复后可直接运行的代码

import os
from PIL import Image
import pandas as pd

data = pd.read_csv('labels.csv')
for index, row in data.iterrows():
    input_name = os.path.join("imagesXRP", row["filename"])
    # 坐标转整数,同时做边界校验避免裁剪越界
    xmin = int(max(0, row["xmin"]))
    ymin = int(max(0, row["ymin"]))
    xmax = int(min(row["width"], row["xmax"]))
    ymax = int(min(row["height"], row["ymax"]))
    tmp_path = input_name + '.tmp'
    
    try:
        # 用with上下文管理器自动释放图片资源,避免句柄泄漏
        with Image.open(input_name) as im:
            im_cropped = im.crop((xmin, ymin, xmax, ymax))
            # 先写入临时文件,避免写入失败损坏原文件
            im_cropped.save(tmp_path)
        # 写入完成后原子替换原文件
        os.replace(tmp_path, input_name)
    except Exception as e:
        print(f"处理文件{input_name}失败,错误信息:{e}")
        # 清理残留的临时文件
        if os.path.exists(tmp_path):
            os.remove(tmp_path)

补充排查项

如果修改后仍有报错,可手动验证两点:

  1. 用系统自带的图片查看器打开报错的图片,确认文件本身没有损坏
  2. 确认运行代码的用户对imagesXRP目录有读写权限,避免权限类问题触发I/O报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:48:02