为当前文件夹中的所有文件(包括子文件夹中的全部文件)生成MD5哈希



在这个线程的帮助下

https://codereview.stackexchange.com/questions/147056/short-script-to-hash-files-in-a-directory

我几乎完全得到了我需要的东西。给定的代码是

from os import listdir, getcwd
from os.path import isfile, join, normpath, basename
import hashlib

def get_files():
current_path = normpath(getcwd())
return [join(current_path, f) for f in listdir(current_path) if isfile(join(current_path, f))]

def get_hashes():
files = get_files()
list_of_hashes = []
for each_file in files:
hash_md5 = hashlib.md5()
with open(each_file, "rb") as f:
for chunk in iter(lambda: f.read(4096), b""):
hash_md5.update(chunk)
list_of_hashes.append('Filename: {}tHash: {}n'.format(basename(each_file), hash_md5.hexdigest()))
return list_of_hashes

def write_hashes():
hashes = get_hashes()
with open('list_of_hashes.txt', 'w') as f:
for md5_hash in hashes:
f.write(md5_hash)

if __name__ == '__main__':
write_hashes()

然而,另外,我想考虑我给定路径的子文件夹中的所有文件,并将它们包含在输出中。我试着使用os.walk((,但没能成功。

你能帮我调整函数get_files((吗,使其为子文件夹中的所有文件生成MD5哈希(即考虑整个文件夹结构?(

谢谢你的帮助!

试试这个:

current_path = normpath(getcwd())
listOfFiles = []
for (dirpath, dirnames, filenames) in walk(current_path):
listOfFiles += [join(dirpath, file) for file in filenames]

(基于此来源(

最新更新