案例故事: 接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
也可關注「武散人」微信訂閱號,隨時接受文章推送。
測試