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

Kaggle代码提取训练图片列表为空问题求助

提取图片名称时返回空列表的问题

我在Kaggle运行以下提取图片名称的代码时,输出结果为空列表[]:

# img_name extraction
imgs_train = [img for img in image_path if (img.split('/')[-1].split)('.jpg')[0] in xmls_train]
imgs_train[:3]

但同样的代码在某Kaggle Notebook中能正常返回图片路径列表:

# img_name extraction
imgs_train = [img for img in image_path if (img.split('/')[-1].split)('.jpg')[0] in xmls_train]
imgs_train[:3]

# 输出结果
['../input/images/images/oil_spot/img_07_425390900_00063.jpg',
 '../input/images/images/oil_spot/img_04_431854700_00385.jpg',
 '../input/images/images/oil_spot/img_08_3437011100_00685.jpg']

我尝试了以下多种写法,均未解决问题:

# 写法1
imgs_train = [q.split('/')[-1].split('.')[0] for q in xmls_train]
imgs_train[:3]

# 写法2
imgs_train = [q.split('\\')[-1].split('.jpg')[0]for q in xmls_train ]
imgs_train[:3]

# 写法3(语法错误)
imgs_train = [img for img in xmls_train if (img.split('/')[-1].split)('.jpg')[0]for img in image_path]
imgs_train[:3]

# 写法4
imgs_train = [img for img in image_path if img in xmls_train]
imgs_train[:3]

# 写法5
imgs_train = [img.split("/")[-1].split('.jpg')[0]for img in image_path]
imgs_train[:3]

# 写法6(与原代码一致)
imgs_train = [img for img in image_path if (img.split('/')[-1].split)('.jpg')[0] in xmls_train]
imgs_train[:3]

# 写法7(逻辑错误,引用未定义变量)
imgs_train = [img for img in image_path if (img.split('/')[-1].split)('.jpg')[0] in imgs_train]
imgs_train[:3]

问题排查与解决方法

  1. 统一路径处理方式
    手动用split('/')或split('\\')容易受平台路径格式影响,建议用os.path模块跨平台处理:

    import os
    # 提取图片文件名(不带后缀)
    img_basename = os.path.splitext(os.path.basename(img))[0]
    
  2. 核对xmls_train的内容格式
    原代码逻辑是「图片文件名(不带.jpg)是否存在于xmls_train」,你需要确认:

    • xmls_train中存储的是不带后缀的文件名,还是带.xml后缀的文件名?如果是后者,需要先把.xml去掉再比对。
    • xmls_train里的内容和图片提取出的文件名是否完全匹配(比如大小写、是否有多余字符)。
  3. 分步调试定位问题
    别直接写列表推导式,先打印中间结果确认每一步是否符合预期:

    # 查看image_path的路径格式
    print("image_path示例:", image_path[:3])
    # 查看每个图片提取出的文件名
    for img in image_path[:3]:
        filename = os.path.splitext(os.path.basename(img))[0]
        print("提取的图片文件名:", filename)
    # 查看xmls_train的内容格式
    print("xmls_train示例:", xmls_train[:3])
    
  4. 修正后的代码示例
    用集合存储xml文件名(查找效率更高),再筛选匹配的图片:

    import os
    
    # 把xmls_train转换成不带后缀的文件名集合
    xml_filename_set = {os.path.splitext(os.path.basename(xml))[0] for xml in xmls_train}
    
    # 筛选匹配的图片路径
    imgs_train = [img for img in image_path if os.path.splitext(os.path.basename(img))[0] in xml_filename_set]
    
    print(imgs_train[:3])
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 11:38:18