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]
问题排查与解决方法
统一路径处理方式
手动用split('/')或split('\\')容易受平台路径格式影响,建议用os.path模块跨平台处理:import os # 提取图片文件名(不带后缀) img_basename = os.path.splitext(os.path.basename(img))[0]核对
xmls_train的内容格式
原代码逻辑是「图片文件名(不带.jpg)是否存在于xmls_train」,你需要确认:xmls_train中存储的是不带后缀的文件名,还是带.xml后缀的文件名?如果是后者,需要先把.xml去掉再比对。xmls_train里的内容和图片提取出的文件名是否完全匹配(比如大小写、是否有多余字符)。
分步调试定位问题
别直接写列表推导式,先打印中间结果确认每一步是否符合预期:# 查看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])修正后的代码示例
用集合存储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
相关产品推荐
相关产品推荐

