如何编写生成目录文件哈希签名的程序?现有代码仅输出哈希值
解决文件哈希签名生成问题:输出文件名与对应哈希值
你这段代码已经有了核心思路,但存在几个关键问题导致它只能输出单一哈希值,没法正确遍历目标目录的所有文件。我帮你修正并优化一下:
import os import hashlib target_path = "/home/ec2-user/environment" for filename in os.listdir(target_path): # 拼接完整文件路径,避免当前工作目录的干扰 file_path = os.path.join(target_path, filename) # 跳过目录,只处理实际文件 if os.path.isfile(file_path): hasher = hashlib.md5() # 打开当前遍历到的文件,替换原代码里的固定文件名 with open(file_path, 'rb') as afile: # 分块读取优化:应对大文件,避免内存占用过高 buf = afile.read(65536) # 每次读取64KB while len(buf) > 0: hasher.update(buf) buf = afile.read(65536) # 同时输出文件名和对应的哈希值 print(f"{filename}: {hasher.hexdigest()}")
核心改进点说明:
- 完整路径处理:用
os.path.join拼接目标路径和文件名,确保判断文件/目录、打开文件时都指向目标目录的内容,而不是脚本所在的当前工作目录。 - 动态遍历文件:把原代码里硬编码的
'39802.jpeg'替换成遍历到的file_path,这样才能逐个处理目录里的所有文件。 - 大文件兼容:改成分块读取文件,就算目录里有几GB的大文件,也不会一次性把整个文件塞进内存,避免内存溢出。
- 格式化输出:用f-string把文件名和哈希值绑定输出,完全符合你要的“文件名+对应哈希值”的需求。
如果需要用其他哈希算法,比如SHA-256,只需要把hashlib.md5()改成hashlib.sha256()就行。
内容的提问来源于stack exchange,提问作者Blake Spiretta
相关产品推荐
相关产品推荐

