os模块是对文件、文件路径的一个处理模块
1.判断一个文件、路劲是否存在:
os.path.exists(path)
返回一个布尔量,存在则返回1,否则则返回0。
2.新建一个文件夹:
os.makedirs(path)#path是一个路径,包括你的文件名
3.os.walk() 方法是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情。
注意:是目录:就是文件夹,返回文件的地址
for path , sub_dirs , files in os.walk(old_path): #文件夹下三层文件,三级文件夹的路径
比如 path = ‘G:\研究生课程文件\数据集\血细胞图像’
但是实际整个路径是这样的’G:\研究生课程文件\数据集\血细胞图像\一级文件夹\1.jpg’
这个时候os.walk返回的path , sub_dirs , files分别是什么:
path是old_path这个路径: ‘G:\研究生课程文件\数据集\血细胞图像’
sub_dirs : 就是path的下一层文件夹的路劲(如果有的话) :G:\研究生课程文件\数据集\血细胞图像\一级文件夹
files :下下层文件夹的路径,这里可以看到已经没有文件夹了。所有这里的值返回[]
4.路径拼接,讲几个路径拼接起来
os.path.join(path1,path2)
5.返回指定的文件夹包含的文件或文件夹的名字的列表
os.listdir(path)
返回path这个目录下的文件、或文件夹的名字的列表
比如: ‘G:\研究生课程文件\数据集\血细胞图像\一级文件夹\1.jpg’
os.listdir(‘G:\研究生课程文件\数据集\血细胞图像\一级文件夹’)
返回:1.jpg
os.listdir(‘G:\研究生课程文件\数据集\血细胞图像’)
返回:一级文件夹
返回的是列表
6.拷贝文件,用到shutil这个模块
shutil.copy(path1,path2)
从path1拷贝到path2
7数据集的切分
把原先的照片打乱,之后再按比例分割
path = 'G:\研究生课程文件\数据集\血细胞图像'
def set_split(old_path):
new_path = 'G:\deep_learming\pytorch\data\cell_set'
if os.path.exists(old_path) == 1: #文件夹存在,则新建一个新的文件夹
os.makedirs(new_path) #新建一个文件夹
else:
print('文件夹不存在!')
return 1
for path , sub_dirs , files in os.walk(old_path): #文件夹下三层文件,三级文件夹的路径
for new_sub_dir in sub_dirs:
filenames = os.listdir(os.path.join(path,new_sub_dir)) #filmenames 这时就是每个二级文件下 ,每张照片的名字
filenames = list(filter(lambda x:x.endswith('.png') , filenames)) #把flimnames = x ,此时以.png结尾的文件通过过滤器 ,filter语法,后接函数还有序列 第一个为判断函数,第二个为序列
#
random.shuffle(filenames) #把序列中所有元素,随机排序 得到一个打乱了的列表
for i in range(len(filenames)):
if i < math.floor(0.6 * len(filenames)):#math.floor 向下取整
sub_path = os.path.join(new_path , 'Train_set',new_sub_dir) #训练集
elif i <math.floor(0.8*len(filenames)):
sub_path = os.path.join(new_path , 'Val_set' , new_sub_dir) #验证集
else:
sub_path = os.path.join(new_path, 'Test_set', new_sub_dir) #测试集
if os.path.exists(sub_path) == 0: #不存在时
os.makedirs(sub_path) #新建一个文件夹
shutil.copy(os.path.join(path, new_sub_dir,filenames[i]) , os.path.join(sub_path , filenames[i])) #拷贝 从第一个路径拷贝到第二个路径下
经过这样就可以将原本的数据集,切割成一个训练集、一个验证集、一个测试集了。