案例故事: 接Python mediainfo批量重命名图片文件,测试图片是批量重命名好了,
可是将测试图片放于一个文件夹相册,图库App并不能显示图片信息,
为了测试的方便性, 须要把图片放到对应的文件夹下,这些文件夹导入手机后,
图库App则就会以相册的形式加载这些文件夹,效果以下:
根据相册名,点击进去就是准确的测试图片文件了,
咱们须要根据图片名称,自动化生成相册文件夹。
python
| 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
记住批处理脚本的精髓:批量顺序执行语句编程
# 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")
把须要反复调用的代码块,封装成一个函数,只预留必定参数输入输出接口。微信
# 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")
面向对象类的编程思惟应该是这样的:
若是给你一个空白的世界,在这个世界里你须要哪些种类的事物,
这些种类的事物都具有哪些共有的属性与方法,
这些种类(类)的事物(对象),和其余种类(其余类)的事物(其余对象)有什么关系。
尽可能把这些类封装好,只暴露对外的属性(变量)和方法(函数)便可。架构
# 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
也可关注“武散人”微信订阅号,随时接受文章推送。
测试