Python3如何將源目錄中的圖片用MD5命名并可以設(shè)定目標(biāo)目錄
將源目錄的圖片用MD5命名并設(shè)定目標(biāo)目錄
嘗試了一下用 python 實(shí)現(xiàn)了一個(gè)生成密碼的程序。感覺還是比較好上手的。但是那個(gè)程序還是非常簡單的一個(gè)小程序。這次我需要實(shí)現(xiàn)一個(gè)更加復(fù)雜的程序,就是整理圖片。
列出需求
- 將圖片文件用圖片的 md5 值進(jìn)行重命名。
- 可以設(shè)定源目錄
- 可以設(shè)定目標(biāo)目錄
- 可以設(shè)定是移動,還是復(fù)制
- 參數(shù)可以缺省
列出這些需求,我開始設(shè)計(jì)我的程序。
最終實(shí)現(xiàn)代碼
#!/usr/bin/env python3 # -*- coding: UTF-8 -*- import sys import os # 獲取文件類型庫 import imghdr # MD5庫 import hashlib # 文件操作庫 import shutil # 設(shè)定默認(rèn)參數(shù) sourceDir = './' targetDir = './' operation = 'move' images = [] # 用戶操作說明 def Usage(): print('USAGE: md5img [source dir] [target dir] [-m | -c]') sys.exit(0) # 根據(jù)輸入的參數(shù),進(jìn)行不同的處理 if len(sys.argv) == 1 or len(sys.argv) > 4: Usage() if len(sys.argv) >= 2: sourceDir = sys.argv[1] targetDir = sys.argv[1] if len(sys.argv) >= 3: targetDir = sys.argv[2] if len(sys.argv) == 4: if sys.argv[3] == '-m': operation = 'move' elif sys.argv[3] == '-c': operation = 'copy' else: print('Operation method is not defined') Usage() # 找到源目錄下所有的圖片 def findImage(sourceDir): # 如果源目錄不存在,則報(bào)錯退出 if not os.path.exists(sourceDir): print('Source directory is not defined') Usage() # 循環(huán)目標(biāo)目錄中的文件 for fil in os.listdir(sourceDir): # 取得文件的路徑 filPath = os.path.join(sourceDir, fil) # 判斷文件是否為目錄 if not os.path.isdir(filPath): # 判斷文件是否為圖片 if imghdr.what(filPath) != None: # 將圖片插入需要處理的列表 images.append(filPath) # 計(jì)算 MD5 值函數(shù) def calcMD5(filepath): with open(filepath,'rb') as f: md5obj = hashlib.md5() md5obj.update(f.read()) hash = md5obj.hexdigest() return hash # 處理所有圖片 def md5img(images): # 如果目標(biāo)目錄不存在,則報(bào)錯退出 if not os.path.exists(targetDir): print('Target directory is not defined') Usage() # 循環(huán)需要處理的圖片列表 for img in images: # 根據(jù)圖片的真實(shí)后綴,來確定圖片的后綴,如果是 jpeg 則改成 jpg postfix = 'jpg' if imghdr.what(img) == 'jpeg' else imghdr.what(img) # os.rename(img, targetDir + '/' + calcMD5(img) + '.' + postfix) # 執(zhí)行復(fù)制或者移動操作 if operation == 'move': shutil.move(img, targetDir + '/' + calcMD5(img) + '.' + postfix) elif operation == 'copy': shutil.copy(img, targetDir + '/' + calcMD5(img) + '.' + postfix) # 找圖片 findImage(sourceDir) # 處理圖片 md5img(images) # 完成 print('Finish')
代碼說明
首先呢是引用各種需要的庫。sys庫和os庫是非?;静⑶页S玫?。然后就是針對各個(gè)需要的功能點(diǎn),找的不同的庫,進(jìn)行引入。
然后,設(shè)定了各種默認(rèn)參數(shù)。需要源目錄,目標(biāo)目錄,操作方法,以及圖片列表,一個(gè)空的數(shù)組。
定義函數(shù)
在 js 中,我們定義一個(gè)函數(shù),用的是 function 。在 python 中,用的是 def。 我現(xiàn)在還不知道 def 代表的是啥意思,如果你知道,在品論中告訴我哈~
其他的內(nèi)容,除了格式差異以外,我感覺和 js 是非常類似的。
但是,在 js 中,函數(shù)放在哪里并不會影響執(zhí)行。但是在 python 中就不一樣了。函數(shù)必須在執(zhí)行的代碼之前定義。否則就會報(bào)錯。
目前我還沒有進(jìn)行多文件的編碼。如果是進(jìn)行多文件的編碼的話,如何組織文件,需要我好好的想一下。
用戶使用說明
首先,我定義了一個(gè)用戶使用說明的函數(shù)。內(nèi)容非常簡單,就是告訴使用者,這個(gè)函數(shù)的使用方法。
然后,就是各種終端錄入的參數(shù)的判斷處理,根據(jù)錄入的參數(shù),重設(shè)我的默認(rèn)值,如果是參數(shù)出錯了,則需要告訴用戶,出錯了。
三元運(yùn)算
python 中沒有三元運(yùn)算???但是有類似的處理方法,只是語法不一樣而已。
比如在 js 中,三元運(yùn)算如下:
res = a > 5 ? 0 : 1
但是在 python 中沒有三元運(yùn)算,我們可以這樣寫:
res = 0 if a > 5 else 1
比較怪異,但是比照著,也是能寫的。
判斷一個(gè)路徑是否存在
我們可以使用 os.path.exists(path) 來判斷 path 這個(gè)路徑是否存在。
找出來一個(gè)路徑下的所有文件或者目錄
os.listdir(path) 就可以列出 path 這個(gè)目錄下面所有的文件或者目錄了。這里得到的是一個(gè)數(shù)組。
我比較習(xí)慣 js 的說法。 python 中說這是列表……
判斷一個(gè)文件是否為圖片,如果為圖片,則輸出圖片的類型
這需要使用一個(gè)庫 imghdr,我們在代碼的開頭引用進(jìn)來即可。
然后我們可以使用 imghdr.what(filPath) 來看文件是否為圖片,如果輸出的是 None 則表示不是圖片。如果是圖片的話,則會輸出圖片的類型。比如 jpg 圖片會輸出 jpeg 這樣。
其他小結(jié)
關(guān)鍵是找到對應(yīng)的庫,然后看庫的方法就可以了。目前我很不熟悉,畢竟是剛剛開始學(xué)。但是通過 google 搜索,是可以很快找到解決各種問題的方法的。
唯一需要注意的是,需要加上關(guān)鍵詞 python3 來避免看到 python2 的內(nèi)容。我就遇到好幾個(gè) 2 的代碼,導(dǎo)致程序跑不起來出錯的問題。
其他的說明我的注釋里面已經(jīng)說得非常清楚了。
Python修改圖片md5
import time writefile = int(time.time * 1000) with open(path,"a") as f: ? ? f.write(str(writefile))
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Django?ORM?事務(wù)和查詢優(yōu)化的操作方法
這篇文章主要介紹了Django?ORM?事務(wù)和查詢優(yōu)化,包括事務(wù)操作、ORM 惰性查詢及only與defer相關(guān)知識,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09利用PyCharm操作Github(倉庫新建、更新,代碼回滾)
這篇文章主要介紹了利用PyCharm操作Github(倉庫新建、更新,代碼回滾),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12Pygame實(shí)戰(zhàn)之迷宮游戲的實(shí)現(xiàn)
玩迷宮游戲長大的我們,欣慰地看到,下一代仍熱愛著這個(gè)經(jīng)典游戲。本文將通過Python中的Pygame庫制作這一經(jīng)典的游戲,需要的可以參考一下2022-02-02Python中使用print函數(shù)進(jìn)行不換行打印問題
這篇文章主要介紹了Python中使用print函數(shù)進(jìn)行不換行打印問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02