案例故事: 接Python mediainfo批量重命名圖片檔案,測驗圖片是批量重命名好了,
但是將測驗圖片放于一個檔案夾相冊,圖庫App并不能顯示圖片資訊,
為了測驗的方便性, 需要把圖片放到對應的檔案夾下,這些檔案夾匯入手機后,
圖庫App則就會以相冊的形式加載這些檔案夾,效果如下:
根據相冊名,點擊進去就是準確的測驗圖片檔案了,
我們需要根據圖片名稱,自動化生成相冊檔案夾,
準備階段
- 為了減少歧義,我們還是建議延用輸入輸出檔案架構,
- 預期效果如下, 雙擊運行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
也可關注“武散人”微信訂閱號,隨時接受文章推送,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/110795.html
標籤:Python
上一篇:animation繪制影片圖
