zoukankan      html  css  js  c++  java
  • 《自拍教程73》Python 自动生成相册文件夹

    案例故事: Python mediainfo批量重命名图片文件,测试图片是批量重命名好了,
    但是将测试图片放于一个文件夹相册,图库App并不能显示图片信息,

    为了测试的方便性, 需要把图片放到对应的文件夹下,这些文件夹导入手机后,
    图库App则就会以相册的形式加载这些文件夹,效果如下:

    根据相册名,点击进去就是准确的测试图片文件了,
    我们需要根据图片名称,自动化生成相册文件夹。

    准备阶段
    1. 为了减少歧义,我们还是建议延用输入输出文件架构。
    2. 预期效果如下, 双击运行auto_folder.py,会在Output_Folder文件夹下自动生成多个“图片格式_图片分辨率” 的子文件夹。
    
            |   auto_folder.py # 双击运行即可
            |   
            +---Input_Image # 输入,图片文件
            |       BMP_128x128_24bit_bmp.bmp
            |       GIF_240x240_undef_gif.gif
            |       JPEG_320x240_8bit_jpg_1.jpg
            |       JPEG_320x240_8bit_jpg_2.jpg
            |       PNG_500x500_32bit_png.png
            |       
            ---Output_Folder # 输出,自动归类并生成相册文件夹
                +---BMP_128x128
                |       BMP_128x128_24bit_bmp.bmp
                |       
                +---GIF_240x240
                |       GIF_240x240_undef_gif.gif
                |       
                +---JPEG_320x240
                |       JPEG_320x240_8bit_jpg_1.jpg
                |       JPEG_320x240_8bit_jpg_2.jpg
                |       
                ---PNG_500x500
                        PNG_500x500_32bit_png.png
    
    

    Python批处理脚本形式

    记住批处理脚本的精髓:批量顺序执行语句

    # coding=utf-8
    
    import os
    from shutil import copyfile
    
    curdir = os.getcwd()
    
    # 输入文件夹,放入待文件夹归类的图片
    input_image_path = os.path.join(curdir, "Input_Image")
    filelist = os.listdir(input_image_path)  # 获取文件列表
    
    # 输出文件夹,已自动归类的文件夹存放在这里
    output_folder_path = os.path.join(curdir, "Output_Folder")
    
    # 如果没有Output_Folder这个文件夹,则创建这个文件夹
    if not os.path.exists(output_folder_path):
        os.mkdir(output_folder_path)
    
    if filelist:  # 如果文件列表不为空
        for i in filelist:  # 遍历文件列表
            # 第一步,获取文件名称,作为新的文件夹的名字,并创建新文件夹
            tempname_list = i.split("_")  # 文件名按_切片
            new_folder_name = tempname_list[0] + "_" + tempname_list[1]
            new_folder_path = os.path.join(output_folder_path, new_folder_name)
            try:
                os.mkdir(new_folder_path)
            except FileExistsError:  # 如果出现文件夹已经存在的错误,直接忽略,即一个文件夹下可能有多个图片文件。
                pass
    
            # 第二步, 复制文件
            image_file = os.path.join(input_image_path, i)
            new_image_file = os.path.join(new_folder_path, i)
            copyfile(image_file, new_image_file)
    else:
        print("It's a Empty folder, please input the image files which need to be renamed firstly!!!")
        os.system("pause")
    

    Python面向过程函数形式:

    把需要反复调用的代码块,封装成一个函数,只预留一定参数输入输出接口。

    # coding=utf-8
    
    import os
    from shutil import copyfile
    
    
    def auto_folder(image_path, dest_folder):
        '''根据文件名称,自动归类到对应的文件夹下去'''
    
        # 第一步,获取文件名称,作为新的文件夹的名字,并创建新文件夹
        image_file = os.path.split(image_path)[-1]
        tempname_list = image_file.split("_")  # 文件名按_切片
        new_folder_name = tempname_list[0] + "_" + tempname_list[1]
        new_folder_path = os.path.join(dest_folder, new_folder_name)
        try:
            os.mkdir(new_folder_path)
        except FileExistsError:  # 如果出现文件夹已经存在的错误,直接忽略,即一个文件夹下可能有多个图片文件。
            pass
    
        # 第二步, 复制文件
        new_image_path = os.path.join(new_folder_path, image_file)
        copyfile(image_path, new_image_path)
    
    
    if __name__ == '__main__':
        curdir = os.getcwd()
    
        # 输入文件夹,放入待文件夹归类的图片
        input_image_path = os.path.join(curdir, "Input_Image")
        filelist = os.listdir(input_image_path)  # 获取文件列表
    
        # 输出文件夹,已自动归类的文件夹存放在这里
        output_folder_path = os.path.join(curdir, "Output_Folder")
    
        # 如果没有Output_Folder这个文件夹,则创建这个文件夹
        if not os.path.exists(output_folder_path):
            os.mkdir(output_folder_path)
    
        if filelist:  # 如果文件列表不为空
            for i in filelist:  # 遍历文件列表
                image_path = os.path.join(input_image_path, i)
                auto_folder(image_path, output_folder_path)
        else:
            print("It's a Empty folder, please input the image files which need to be renamed firstly!!!")
            os.system("pause")
    

    Python面向对象类形式

    面向对象类的编程思维应该是这样的:
    如果给你一个空白的世界,在这个世界里你需要哪些种类的事物,
    这些种类的事物都具备哪些共有的属性与方法,
    这些种类(类)的事物(对象),和其他种类(其他类)的事物(其他对象)有什么关系。
    尽量把这些类封装好,只暴露对外的属性(变量)和方法(函数)即可。

    # coding=utf-8
    
    import os
    from shutil import copyfile
    
    
    class AutoFolder(object):
        def __init__(self, image_path):
            self.image_path = image_path
    
        def auto_folder(self, dest_folder):
            '''根据文件名称,自动归类到对应的文件夹下去'''
    
            # 第一步,获取文件名称,作为新的文件夹的名字,并创建新文件夹
            image_file = os.path.split(self.image_path)[-1]
            tempname_list = image_file.split("_")  # 文件名按_切片
            new_folder_name = tempname_list[0] + "_" + tempname_list[1]
            new_folder_path = os.path.join(dest_folder, new_folder_name)
            try:
                os.mkdir(new_folder_path)
            except FileExistsError:  # 如果出现文件夹已经存在的错误,直接忽略,即一个文件夹下可能有多个图片文件。
                pass
    
            # 第二步, 复制文件
            new_image_path = os.path.join(new_folder_path, image_file)
            copyfile(self.image_path, new_image_path)
    
    
    if __name__ == '__main__':
        curdir = os.getcwd()
    
        # 输入文件夹,放入待文件夹归类的图片
        input_image_path = os.path.join(curdir, "Input_Image")
        filelist = os.listdir(input_image_path)  # 获取文件列表
    
        # 输出文件夹,已自动归类的文件夹存放在这里
        output_folder_path = os.path.join(curdir, "Output_Folder")
    
        # 如果没有Output_Folder这个文件夹,则创建这个文件夹
        if not os.path.exists(output_folder_path):
            os.mkdir(output_folder_path)
    
        if filelist:  # 如果文件列表不为空
            for i in filelist:  # 遍历文件列表
                image_path = os.path.join(input_image_path, i)
                a_obj = AutoFolder(image_path)
                a_obj.auto_folder(output_folder_path)
        else:
            print("It's a Empty folder, please input the image files which need to be renamed firstly!!!")
            os.system("pause")
    

    本案例练手素材下载

    以上代码的3种实现形式都可以直接运行,比如保存为auto_floder.py,
    建议python auto_folder.py运行,当然也可以双击运行。
    跳转到自拍教程官网下载


    更多更好的原创文章,请访问官方网站:www.zipython.com
    自拍教程(自动化测试Python教程,武散人编著)
    原文链接:https://www.zipython.com/#/detail?id=281b5094c3864c53bb7284b2a18a3468
    也可关注“武散人”微信订阅号,随时接受文章推送。

  • 相关阅读:
    【每日算法】C语言8大经典排序算法(2)
    C++虚函数与纯虚函数的区别
    C++ 运算符优先级列表
    【每日算法】C语言8大经典排序算法(1)
    C++中的友元函数和友元类
    二叉树前序、中序、后序遍历相互求法
    【转】运算符重载的例析
    从一个二级题来看成员函数重载运算符和友元函数重载运算符
    测试用例管理之 TestLink
    【转】关于LoadRunner的迭代
  • 原文地址:https://www.cnblogs.com/zipython/p/13184170.html
Copyright © 2011-2022 走看看