Python3如何將源目錄中的圖片用MD5命名并可以設(shè)定目標(biāo)目錄
將源目錄的圖片用MD5命名并設(shè)定目標(biāo)目錄
嘗試了一下用 python 實(shí)現(xiàn)了一個(gè)生成密碼的程序。感覺還是比較好上手的。但是那個(gè)程序還是非常簡(jiǎn)單的一個(gè)小程序。這次我需要實(shí)現(xiàn)一個(gè)更加復(fù)雜的程序,就是整理圖片。
列出需求
- 將圖片文件用圖片的 md5 值進(jìn)行重命名。
- 可以設(shè)定源目錄
- 可以設(shè)定目標(biāo)目錄
- 可以設(shè)定是移動(dòng),還是復(fù)制
- 參數(shù)可以缺省
列出這些需求,我開始設(shè)計(jì)我的程序。
最終實(shí)現(xiàn)代碼
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import sys
import os
# 獲取文件類型庫(kù)
import imghdr
# MD5庫(kù)
import hashlib
# 文件操作庫(kù)
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)錯(cuò)退出
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)錯(cuò)退出
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ù)制或者移動(dòng)操作
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')代碼說明
首先呢是引用各種需要的庫(kù)。sys庫(kù)和os庫(kù)是非常基本并且常用的。然后就是針對(duì)各個(gè)需要的功能點(diǎn),找的不同的庫(kù),進(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ù)放在哪里并不會(huì)影響執(zhí)行。但是在 python 中就不一樣了。函數(shù)必須在執(zhí)行的代碼之前定義。否則就會(huì)報(bào)錯(cuò)。
目前我還沒有進(jìn)行多文件的編碼。如果是進(jìn)行多文件的編碼的話,如何組織文件,需要我好好的想一下。
用戶使用說明
首先,我定義了一個(gè)用戶使用說明的函數(shù)。內(nèi)容非常簡(jiǎn)單,就是告訴使用者,這個(gè)函數(shù)的使用方法。
然后,就是各種終端錄入的參數(shù)的判斷處理,根據(jù)錄入的參數(shù),重設(shè)我的默認(rèn)值,如果是參數(shù)出錯(cuò)了,則需要告訴用戶,出錯(cuò)了。
三元運(yùn)算
python 中沒有三元運(yùn)算???但是有類似的處理方法,只是語(yǔ)法不一樣而已。
比如在 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è)庫(kù) imghdr,我們?cè)诖a的開頭引用進(jìn)來即可。
然后我們可以使用 imghdr.what(filPath) 來看文件是否為圖片,如果輸出的是 None 則表示不是圖片。如果是圖片的話,則會(huì)輸出圖片的類型。比如 jpg 圖片會(huì)輸出 jpeg 這樣。
其他小結(jié)
關(guān)鍵是找到對(duì)應(yīng)的庫(kù),然后看庫(kù)的方法就可以了。目前我很不熟悉,畢竟是剛剛開始學(xué)。但是通過 google 搜索,是可以很快找到解決各種問題的方法的。
唯一需要注意的是,需要加上關(guān)鍵詞 python3 來避免看到 python2 的內(nèi)容。我就遇到好幾個(gè) 2 的代碼,導(dǎo)致程序跑不起來出錯(cuò)的問題。
其他的說明我的注釋里面已經(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)文章
Python實(shí)現(xiàn)帶下標(biāo)索引的遍歷操作示例
這篇文章主要介紹了Python實(shí)現(xiàn)帶下標(biāo)索引的遍歷操作,結(jié)合具體實(shí)例形式分析了2種帶索引的遍歷操作實(shí)現(xiàn)方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-05-05
Python利用wxPython實(shí)現(xiàn)ocr識(shí)別圖片漢字程序
在這篇博客中,我們將介紹一個(gè)如何使用wxPython構(gòu)建的簡(jiǎn)單OCR識(shí)別圖片漢字應(yīng)用程序,文章的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下2023-08-08
使用Python的音樂播放器GUI的實(shí)現(xiàn)
本文主要介紹了使用Python的音樂播放器GUI的實(shí)現(xiàn),可以讓您快速輕松地管理和收聽所有音樂文件,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12
運(yùn)動(dòng)檢測(cè)ViBe算法python實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了運(yùn)動(dòng)檢測(cè)ViBe算法python實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
在Python3中初學(xué)者應(yīng)會(huì)的一些基本的提升效率的小技巧
這篇文章主要介紹了在Python3中的一些基本的小技巧,有利于剛剛上手Python的初學(xué)者提升開發(fā)效率,需要的朋友可以參考下2015-03-03

