python计算文件的md5值

python3.6 windows下

需求:

利用python计算文件的md5值

一,代码:

import hashlib, sys, os

def ListAllFiles(root_dir, suffix=''):
	"""
	获取指定目录下的所有文件
	root_dir:指定目录
	suffix:文件的格式(文件名以什么结尾[.txt|.zip|.cfg|...], 不指定的话就默认该目录下的所有文件)
	"""
	files = []
	file_list = os.listdir(root_dir)
	
	for i in range(0, len(file_list)):
		path = os.path.join(root_dir, file_list[i])
		if os.path.isdir(path):
			files.extend(ListAllFiles(path, suffix))
			
		if os.path.isfile(path):
			if suffix and path.endswith(suffix) or not suffix:
				files.append(path)
			
	return files
	
def Md5sum(files, md5_file):
	"""
	计算文件的md5值
	files:要计算的文件
	md5_file:存储md5值的文件
	"""
	print('Total File Size: ', len(files))
	
	if len(files) > 0:
		with open(md5_file, 'w', encoding='utf-8') as f:
			for file in files:
				md5_val = hashlib.md5(open(file,'rb').read()).hexdigest()
				str = file.split('\\')[-1] + ': ' + md5_val + '\n'
				f.write(str)

# 指定目录,前面加‘r’是为了防止识别不了有些文件名带空格
dest_dir = r"C:\\Users\\Administrator\\Desktop\\PPT"
# 指定md5值保存的文件
md5_file = 'result.txt'	

if __name__ == '__main__':
	print('Usage: ', sys.argv[0], '[.zip|.sh|.cfg|...]')
	
	files = []
	argc = len(sys.argv)
	if argc > 1:
		suffix_dict = {}
		for i in range(argc - 1):
			suffix_dict[sys.argv[i+1]] = None
		
		for k, v in suffix_dict.items():
			files.extend(ListAllFiles(dest_dir, k))
	else:
		files = ListAllFiles(dest_dir)
		
	Md5sum(files, md5_file)
	print('----------- Completed ----------------')
	

二,windows下执行结果:

三,linux下就可以直接用md5sum命令

你可能感兴趣的:(python,python,MD5)