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命令