<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
嘗試了一下用 python 實現了一個生成密碼的程式。感覺還是比較好上手的。但是那個程式還是非常簡單的一個小程式。這次我需要實現一個更加複雜的程式,就是整理圖片。
列出這些需求,我開始設計我的程式。
#!/usr/bin/env python3 # -*- coding: UTF-8 -*- import sys import os # 獲取檔案型別庫 import imghdr # MD5庫 import hashlib # 檔案操作庫 import shutil # 設定預設引數 sourceDir = './' targetDir = './' operation = 'move' images = [] # 使用者操作說明 def Usage(): print('USAGE: md5img [source dir] [target dir] [-m | -c]') sys.exit(0) # 根據輸入的引數,進行不同的處理 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): # 如果源目錄不存在,則報錯退出 if not os.path.exists(sourceDir): print('Source directory is not defined') Usage() # 迴圈目標目錄中的檔案 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) # 計算 MD5 值函數 def calcMD5(filepath): with open(filepath,'rb') as f: md5obj = hashlib.md5() md5obj.update(f.read()) hash = md5obj.hexdigest() return hash # 處理所有圖片 def md5img(images): # 如果目標目錄不存在,則報錯退出 if not os.path.exists(targetDir): print('Target directory is not defined') Usage() # 迴圈需要處理的圖片列表 for img in images: # 根據圖片的真實字尾,來確定圖片的字尾,如果是 jpeg 則改成 jpg postfix = 'jpg' if imghdr.what(img) == 'jpeg' else imghdr.what(img) # os.rename(img, targetDir + '/' + calcMD5(img) + '.' + postfix) # 執行復制或者移動操作 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庫是非常基本並且常用的。然後就是針對各個需要的功能點,找的不同的庫,進行引入。
然後,設定了各種預設引數。需要源目錄,目標目錄,操作方法,以及圖片列表,一個空的陣列。
定義函數
在 js 中,我們定義一個函數,用的是 function 。在 python 中,用的是 def。 我現在還不知道 def 代表的是啥意思,如果你知道,在品論中告訴我哈~
其他的內容,除了格式差異以外,我感覺和 js 是非常類似的。
但是,在 js 中,函數放在哪裡並不會影響執行。但是在 python 中就不一樣了。函數必須在執行的程式碼之前定義。否則就會報錯。
目前我還沒有進行多檔案的編碼。如果是進行多檔案的編碼的話,如何組織檔案,需要我好好的想一下。
使用者使用說明
首先,我定義了一個使用者使用說明的函數。內容非常簡單,就是告訴使用者,這個函數的使用方法。
然後,就是各種終端錄入的引數的判斷處理,根據錄入的引數,重設我的預設值,如果是引數出錯了,則需要告訴使用者,出錯了。
三元運算
python 中沒有三元運算???但是有類似的處理方法,只是語法不一樣而已。
比如在 js 中,三元運算如下:
res = a > 5 ? 0 : 1
但是在 python 中沒有三元運算,我們可以這樣寫:
res = 0 if a > 5 else 1
比較怪異,但是比照著,也是能寫的。
判斷一個路徑是否存在
我們可以使用 os.path.exists(path) 來判斷 path 這個路徑是否存在。
找出來一個路徑下的所有檔案或者目錄
os.listdir(path) 就可以列出 path 這個目錄下面所有的檔案或者目錄了。這裡得到的是一個陣列。
我比較習慣 js 的說法。 python 中說這是列表……
判斷一個檔案是否為圖片,如果為圖片,則輸出圖片的型別
這需要使用一個庫 imghdr,我們在程式碼的開頭參照進來即可。
然後我們可以使用 imghdr.what(filPath) 來看檔案是否為圖片,如果輸出的是 None 則表示不是圖片。如果是圖片的話,則會輸出圖片的型別。比如 jpg 圖片會輸出 jpeg 這樣。
關鍵是找到對應的庫,然後看庫的方法就可以了。目前我很不熟悉,畢竟是剛剛開始學。但是通過 google 搜尋,是可以很快找到解決各種問題的方法的。
唯一需要注意的是,需要加上關鍵詞 python3 來避免看到 python2 的內容。我就遇到好幾個 2 的程式碼,導致程式跑不起來出錯的問題。
其他的說明我的註釋裡面已經說得非常清楚了。
import time writefile = int(time.time * 1000) with open(path,"a") as f: f.write(str(writefile))
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45