每一個公司對上線的業務要求都不同,但對一些重要的文件,在線上覆蓋前要全面檢查文件的md5,因此這就要求得到更新前文件的md5值,而後跟研發提供的作比較,若是一致才更新,若是發現不對,就中止更新,固然邏輯都寫在腳本里就能夠了,由於每一個公司線上服的更新邏輯都不同,這塊內容咱們不作深刻探討,咱們今天主要看看如何得到研發的更新文件的md5值,基本思路是這樣,首先須要定義一個函數得到研發給的每一個文件絕對路徑,而後再定義一個函數用來返回md5值,在主函數中對每一個文件調用生成md5值得函數獲得md5值而後寫入文件中,腳本思路就介紹到這裏,咱們來看代碼:python
#!/usr/bin/python app
import sys ide
import os函數
import hashlib this
if len(sys.argv) < 2:spa
print 'this script need a arv'orm
sys.exit(0)對象
if not os.path.exists(sys.argv[1]) or not os.path.isdir(sys.argv[1]):ip
print 'it is not exists or not a dir'md5
sys.exit(1)
def getmd5(filename):
m = hashlib.md5()
mfile = open(filename, 'rb')
m.update(mfile.read())
mfile.close()
md5value = m.hexdigest()
return (md5value+"\t"+ filename)
def all_files(root):
flist = []
for path, subdirs, files in os.walk(root):
for f in files:
flist.append(os.path.join(path, f))
return flist
if __name__ == '__main__':
outfile = open('md5file.txt', 'a+')
flist = all_files(sys.argv[1])
for fi in flist:
res = getmd5(fi)
outfile.write(res + '\n')
outfile.close()
腳本解釋,最前開始導入須要的模塊,以前python還單獨有個md5模塊,如今基本不用了,都用hashlib了,這個功能更爲強大,先定義了一個getmd5()的函數,接收一個文件當作參數,hashlib.md5()生成hash對象,而後調用update()方法將字符串計算出md5值,接下來定義了all_files()函數,這個函數接收一個目錄,而後獲得文件的絕對路徑,加入到列表中,返回。
在主函數中,打開一個文件md5file.txt來存儲得到的文件名和對應的md5值,循環flist列表,將文件傳入getmd5()函數,得到文件和md5數據,寫入文件,最後關閉文件,這篇就到這裏