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]))  #拷贝  从第一个路径拷贝到第二个路径下

经过这样就可以将原本的数据集,切割成一个训练集、一个验证集、一个测试集了。