Python处理宫颈图像数据集出现IndexError列表索引越界问题求助
错误原因
IndexError: list index out of range由路径分割符不匹配触发:
- Windows系统下
glob返回的路径默认用反斜杠\作为分割符,你代码中强行用斜杠/执行split('/')操作,无法将路径切分为预期的分段列表。 - 分割后的列表长度仅为1,访问不存在的索引
[3]就会触发越界报错。
修复方案
1. 统一路径分割逻辑
不要手动写死分割符,先把所有路径的反斜杠替换为斜杠再做分割,避免跨系统兼容问题:
# 所有路径先执行统一替换 p = p.replace('\\', '/')
也可以直接用os.path模块的内置方法提取文件名、父目录,兼容性更强。
2. 修正test集构造代码(报错点)
将列表推导替换为如下逻辑,避免硬编码索引:
test = glob.glob('D:\\Test cods\\KerasCNNClean\\data\\test\\*.jpg') test_data_list = [] for p in test: # 先统一分割符 p_uniform = p.replace('\\', '/') # 取路径最后一段作为文件名,不需要硬编码索引 img_name = p_uniform.split('/')[-1] test_data_list.append([img_name, p]) test = pd.DataFrame(test_data_list, columns = ['image','path'])
3. 同步修正train集的潜在问题
- 你当前train路径拼接的换行写法错误,加号要放在上一行末尾,否则train只会包含Type_1的图片:
# 错误写法 train=glob.glob('D:\\Test cods\\KerasCNNClean\\data\\train\\Type_1\\*.jpg') +glob.glob('D:\\Test cods\\KerasCNNClean\\data\\train\\Type_2\\*.jpg') +glob.glob('D:\\Test cods\\KerasCNNClean\\data\\train\\Type_3\\*.jpg') # 正确写法 train=glob.glob('D:\\Test cods\\KerasCNNClean\\data\\train\\Type_1\\*.jpg') + \ glob.glob('D:\\Test cods\\KerasCNNClean\\data\\train\\Type_2\\*.jpg') + \ glob.glob('D:\\Test cods\\KerasCNNClean\\data\\train\\Type_3\\*.jpg')
- 同步修改train的列表推导逻辑,避免同样的索引越界问题:
train_data_list = [] for p in train: p_uniform = p.replace('\\', '/') path_parts = p_uniform.split('/') # 取倒数第二段作为类别,对应Type_1/2/3 img_type = path_parts[-2] # 取最后一段作为文件名 img_name = path_parts[-1] train_data_list.append([img_type, img_name, p]) train = pd.DataFrame(train_data_list, columns = ['type','image','path'])[::5]
内容的提问来源于stack exchange,提问作者Nina
相关产品推荐
相关产品推荐

