让两个文件夹里的图片名字一模一样
为了做测试集,对应数据和真值
import os
import datetimeimage_names = os.listdir(r'\Images')
#print(image_names)
#print(len(image_names))mask_names = os.listdir(r'G:\Mask')
#print(mask_names)
#print(len(mask_names))#根据你提供的文件名排序结果来看,问题可能是文件名中数字部分为string类型,而不是int类型。
#字符串'10'会排在字符串'2'的前面,所以可能是这个原因导致的不正确排序。
#可以在获取数字部分时转换为int:
mask_names.sort(key=lambda x: int(x.split('_')[1].split('.')[0]))
#print(mask_names)for i, mask_name in enumerate(os.listdir(r'\Mask')):new_name = image_names[i].split('.')[0] + '.png'os.rename(os.path.join(r'\Mask', mask_name), os.path.join(r'\Mask', new_name))
这个情况出现的原因是:
Python在排序字符串时,是按照ASCII码顺序进行排序的。在ASCII码中,'1'的码值小于'2',所以'10'作为字符串排序会排在'2'之前。
而我们希望的是按照数字大小顺序排序,但是os.listdir()读取的文件名默认都是字符串类型。这就造成了字符串排序和数字排序的不一致。
具体来说:
1. os.listdir() 返回的文件名列表默认都是字符串类型
2. 对字符串列表排序时,是按照ASCII码顺序排序的
3. 在ASCII码顺序中,'1' < '2',所以字符串'10'会排在字符串'2'之前
4. 而我们期望是按数字大小排序,所以出现了字符串排序和数字排序不一致的问题
解决方法就是在排序前,将字符串转换成数字,或者提取文件名中的数字部分进行转换,确保排序的键都是整数类型,才能避免这个问题。
几点注意:
- os.listdir()返回的是字符串
- Python字符串排序按ASCII码顺序
- 可以通过int()将字符串转换为整数
- 在排序前处理键,确保是整数类型
明确字符串和整数在排序逻辑上的不同,并做类型转换,是这个问题的解决方案。