最近要開發乙個基於python的合併資料夾/目錄的程式,本來的想法是基於修改時間的比較,即判斷檔案有沒有改變,比較兩個檔案的修改時間即可。這個想法在windows的pc端下測試沒有問題。
但是當把乙個檔案從pc端複製到優盤時出現了乙個問題,複製到優盤的檔案比pc端的檔案慢了兩秒鐘!
這裡我用的複製函式是 shutil.copy2(),理論上它會把修改時間和最後訪問時間也複製過來1,但是實際情況並不是完全相同。
詳細情況我在segmentfault裡提出了問題:為什麼將乙個檔案從pc中複製到優盤中修改時間會慢2秒鐘?
扯遠了,基於以上問題的出現,迫使我得修改比較策略,於是我找到了用檔案的md5值比較的方法,yeah!~
檔案被修改後其md5值也會改變,所以可以用來判斷乙個檔案是否被修改過。
這樣的方法比基於時間的比較顯然更加可靠,現在唯一的問題就是md5計算時間的問題。乙個大檔案計算md5值要多久呢?
網上的解決**已經有很多了,大都是兩種方法,一種是小檔案的md5加密,呼叫函式直接加密即可,另一種是大檔案的md5加密策略,方法是將大檔案分塊更新md5值,最後得到最終的值。
下面我使用第二種方法對大檔案進行加密測試。
測試物件是乙個將近2g的壓縮檔案,如下:
加密結果如下:
執行時間是20s,不快也不慢,相對檔案大小來說,我還是能接受這個速度……
計算出的md5值是「8ee04176f69c10ca56f2358d51d792ed」,這個值對不對呢?我在網上做了驗證:
兩個值相等,由此可見該演算法,計算正確。測試**見下。
測試**在這:
有趣的是,我對檔案進行了第二次、第三次、第四次加密,發現加密時間少了5秒左右,好神奇,不知道為什麼。
搞定了md5加密,我可以繼續進行下一步開發了~ :)
請輸入檔案路徑:')
2122
#輸出檔案的md5值以及記錄執行時間
23 starttime =datetime.datetime.now()
24print
getfilemd5(filepath)
25 endtime =datetime.datetime.now()
26print
''%((endtime-starttime).seconds)
python中os和shutil模組實用方法集錦
python檢測檔案的md5值
python計算檔案的MD5值
一 import sys import hashlib import os.path filename sys.argv 1 if os.path.isfile filename fp open filename,rb contents fp.read fp.close print hashlib....
python計算檔案的md5值
python3.6 windows下 需求 利用python計算檔案的md5值 一,import hashlib,sys,os def listallfiles root dir,suffix 獲取指定目錄下的所有檔案 root dir 指定目錄 suffix 檔案的格式 檔名以什麼結尾 txt z...
用python計算檔案的md5值
在python中內建了md5的實現,就是md5模組,因此可以很簡單的處理比較兩個檔案是否一致的問題。如以下 片斷 import os,sys,md5 f1 open f 1.txt r f2 open f 1.txt r print md5.new f1.read digest md5.new f2...