importos,hashlib
defgetlistdir(path):
try:#如果path是一個文件的完整名稱,os.listdir會拋出錯誤
fl=os.listdir(path)
exceptExceptionase:
fl=[]
finally:
returnfl
defgetallfile(path):
allfile=[]
fl=getlistdir(path)
iflen(fl)!=0:
fl=list(map(lambdax:path+'\'+x,fl))
allfile=allfile+fl
forfinfl:
allfile=allfile+getallfile(f)
returnallfile
defmakemd5(stri):
md5=hashlib.md5()
md5.update(stri.encode('utf-8'))
returnmd5.hexdigest()
defmain():
myfilelist=getallfile('.')#獲取當前文件'.'中的所有文件和文件夾名list
myfilestr='|'.join(myfilelist)#文件list轉換為以'|'分隔的字元串
print(myfilestr)#顯示要進行md5摘要加密的字元
print("md5=",makemd5(myfilestr))#計算並顯示md5碼
main()
2. 用python3 計算指定目錄下所有文件md5值,並輸出到一個txt文件
import os
import hashlib
path = '指定目錄'
def calc_md5(file_obj):
md5 = hashlib.md5()
while True:
chunk = file_obj.read(1024**2) # 1K
if not chunk:
return md5.hexdigest()
md5.update(chunk)
if __name__ == '__main__':
# 只遍歷本目錄,不遍歷子目錄
with open('md5.txt', 'w') as fout:
for file_name in os.listdir(path):
file_path = os.path.join(path, file_name)
if os.path.isfile(file_path):
with open(file_path, 'rb') as fin:
info = '%s %s' % (file_name, calc_md5(fin))
print(info)
fout.write(info + '\n')