zoukankan      html  css  js  c++  java
  • Python 文件操作函数

    这个博客是 Building powerful image classification models using very little data 的前期准备,用于把图片数据按照教程指示放到规定的文件夹中。

    python 文件处理主要用到 os 模块和 shutil 模块,'sh' 大概是 bash 的意思

    os.chdir('path') 改变当前路径到 path

    os.listdir('path') 输出 path 路径下所有的文件名

    os.makedirs('path/dirname') 在 path 路径下创建 dirname 文件夹

    shutil.copy2('path/filename', 'newpath') 将 path 路径下的 filename 文件拷贝到 newpath 路径下

    场景:按照上面的教程,我们需要先下载 kaggle 猫狗识别大赛的源文件,分为 train 和 test1,解压后放到 cat_dog 文件夹,然后,我们将构建符合教程要求的文件目录,其结构如下图所示(注意文件名的变化):

    data/
        train/
            dogs/
                dog001.jpg
                dog002.jpg
                ...
            cats/
                cat001.jpg
                cat002.jpg
                ...
        validation/
            dogs/
                dog001.jpg
                dog002.jpg
                ...
            cats/
                cat001.jpg
                cat002.jpg
                ...

    依据教程要求,需要从 train 文件夹中将 cat.000.jpg 到 cat.999.jpg 拷贝到 data/cats/cat000.jpg 到 data/cats/cat999.jpg,将 cat.1000.jpg 到 cat.1399.jpg 拷贝到 validation/cats/cat000.jpg 到 validation/cats/cat399.jpg。同样的结构用于狗数据集的构建。

    代码:

    import shutil
    import os
    
    os.chdir('cat_dog')
    os.makedirs('train')
    os.makedirs('train/dogs')
    os.makedirs('train/cats')
    os.makedirs('validation')
    os.makedirs('validation/dogs')
    os.makedirs('validation/cats')
    
    def getFileName(num, category):
        return category+'.'+str(num)+'.jpg'
    
    def setFileName(num, category):
        num = str(num)
        num = (3-len(num))*'0'+num
        return category+num+'.jpg'
    
    for num in range(1000):
        cat = getFileName(num, 'cat')
        dog = getFileName(num, 'dog')
        new_cat = setFileName(num, 'cat')
        new_dog = setFileName(num, 'dog')
        shutil.copy2('train1/'+cat, 'train/cats/'+new_cat)
        shutil.copy2('train1/'+dog, 'train/dogs/'+new_dog)
    
    for num in range(400):
        cat = getFileName(1000+num, 'cat')
        dog = getFileName(1000+num, 'dog')
        new_cat = setFileName(num, 'cat')
        new_dog = setFileName(num, 'dog')
        shutil.copy2('train1/'+cat, 'validation/cats/'+new_cat)
        shutil.copy2('train1/'+dog, 'validation/dogs/'+new_dog)

     ps:为了使得构建的 train 与之前下载的 train 文件夹不重名,将之前的 train 文件夹改为 train1.

    pps: 没注意看原教程要求,这里构建的 train 文件夹和 validation 文件夹应该放到 data 目录下,直接手动操作就好了。

  • 相关阅读:
    字体颜色和字体样式的演示
    消息的测试
    java泛型例子
    python画太阳花
    列出进程界面
    画蟒蛇
    同切圆的绘制
    IDEA 2019.3.1永久破解
    springMVC ——Controller配置方式
    SpringMVC——JSR303的数据校验Hibernate Validator方式实现
  • 原文地址:https://www.cnblogs.com/yinxiangnan-charles/p/5933946.html
Copyright © 2011-2022 走看看