获取python中带有子目录的目录中的所有文件md5哈希

Posted

技术标签:

【中文标题】获取python中带有子目录的目录中的所有文件md5哈希【英文标题】:Get all files md5 hash in a directory with subdirectories in python 【发布时间】:2021-11-25 15:33:04 【问题描述】:

我是 python 新手。我想问一下,如何在带有子目录的目录中获取所有文件 md5 哈希?目前我的编码只能获取文件夹中文件的 md5 哈希值。任何建议或代码需要进行更改?以下是我的编码:

import hashlib
import glob
import os.path
filenames = glob.glob('C:/Users/User/Desktop/irustesting/*')
def md5(fname):
    hash_md5 = hashlib.md5()
    with open(fname, "rb") as f:
        for chunk in iter(lambda: f.read(2 ** 20), b""):
            hash_md5.update(chunk)
    return hash_md5.hexdigest()

viruslist = open('C:/FYP/SecuCOM2022/viruslist.txt','rt')
virusinside = [l.rstrip() for l in viruslist]
virus="detected"
novirus="clear"

for filename in filenames:
    print(filename, md5(filename))
    if md5(filename) in virusinside:
        print(virus)
        os.remove(filename)
    else:
        print(novirus)  

【问题讨论】:

docs.python.org/3/library/os.html#os.walk 递归遍历所有目录,使用 os.walk 【参考方案1】:

您可以通过定义以下函数使用os.walk() 方法检索文件的所有绝对路径:

import os

def get_all_abs_paths(rootdir):
   paths = list()
   for dirpath,_,filenames in os.walk(rootdir):
      for f in filenames:
         paths.append(os.path.abspath(os.path.join(dirpath, f)))
return paths

通过这种方式,您可以通过将 glob 调用替换为 filenames 变量来使用您的代码 filenames=get_abs_paths('C:/Users/User/Desktop/irustesting')

【讨论】:

我修改了代码,但出现了错误——文件​​名中的文件名:TypeError: 'NoneType' object is not iterable 是打印功能的原因吗?

以上是关于获取python中带有子目录的目录中的所有文件md5哈希的主要内容,如果未能解决你的问题,请参考以下文章

安卓获取文件MD5值

PHP 获取给定目录的所有子目录

如何获取目录下的文件数(一行Python)

Python计算一个目录下的所有文件的md5值,在Linux系统下面

如何在shell脚本中获取目录中的文件列表?

如何获取子目录中所有文件的创建日期[重复]