Google Colab中Python代码无法批量读取指定路径JPG文件求助
狗品种识别代码批量处理时无法找到图片的问题排查
问题说明
在Google Colab运行狗品种识别Python代码时遇到以下问题:
- 手动将代码中的
{id}替换为具体文件名时,代码可正常读取图片; - 批量处理时(通过
map生成文件路径),代码始终提示找不到指定路径下的JPG图片,但手动在对应路径下能直接找到目标文件,无法完成后续狗品种预测。
代码片段
id='../content/drive/MyDrive/dog-breed-identification/train/000bec180eb18c7604dcecc8fe0dba07.jpg' dogs = pd.read_csv('../content/drive/MyDrive/dog-breed-identification/labels.csv') dogs = dogs.sample(20) dogs['file'] = dogs.id.map(lambda id: f'../content/drive/MyDrive/dog-breed-identification/train/{id}.jpg') dogs['image'] = dogs.file.map(lambda f: get_thumbnail(f)) dogs.head()
报错情况
报错核心为FileNotFoundError,提示生成的文件路径不存在(对应截图显示的找不到文件错误)。
问题原因
代码存在变量名冲突:
你在开头定义了全局变量id,其值是完整的图片路径;而后续lambda表达式的参数名也用了id,这导致lambda里的id不会引用DataFrame中dogs.id的每行id值,而是直接使用全局的那个完整路径。
最终生成的路径会变成类似:
../content/drive/MyDrive/dog-breed-identification/train/../content/drive/MyDrive/dog-breed-identification/train/000bec180eb18c7604dcecc8fe0dba07.jpg.jpg
这种嵌套的错误路径自然找不到文件。
解决方案
有两种简单的修复方式:
- 修改全局变量名:把开头的
id改成其他名称(比如sample_img_path),或者直接删除这行(因为后续代码并未用到这个变量):# 改名示例 sample_img_path='../content/drive/MyDrive/dog-breed-identification/train/000bec180eb18c7604dcecc8fe0dba07.jpg' - 修改lambda参数名:把
lambda里的参数id换成其他名称(比如x),避免和全局变量冲突:dogs['file'] = dogs.id.map(lambda x: f'../content/drive/MyDrive/dog-breed-identification/train/{x}.jpg')
修改后,lambda会正确读取DataFrame中每行的id值,生成正确的文件路径,批量处理即可正常读取图片。
内容的提问来源于stack exchange,提问作者Samuel STÅLBERG
相关产品推荐
相关产品推荐

