如何获取文件夹中的所有文件并在python中获取它们的MD5散列?

2024-09-27 09:25:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一些代码来获取文件夹中每个exe文件的md5。

我的问题是我不知道怎么做。只有当文件夹只包含一个文件时,它才起作用。这是我的代码:

import glob
import hashlib
file = glob.glob("/root/PycharmProjects/untitled1/*.exe")

newf = str (file)
newf2 =  newf.strip( '[]' )
newf3 = newf2.strip("''")

with open(newf3,'rb') as getmd5:
    data = getmd5.read()
    gethash= hashlib.md5(data).hexdigest()
    print gethash

我得到的结果是:

a7f4518aae539254061e45424981e97c

我想知道如何处理文件夹中的多个文件。


Tags: 文件代码import文件夹dataexemd5glob
2条回答

glob.glob返回文件列表。只需使用for遍历列表:

import glob
import hashlib

filenames = glob.glob("/root/PycharmProjects/untitled1/*.exe")

for filename in filenames:
    with open(filename, 'rb') as inputfile:
        data = inputfile.read()
        print(filename, hashlib.md5(data).hexdigest())

注意,如果您碰巧在该目录中有一个大文件,那么这可能会耗尽您的内存,因此它是better to read the file in smaller chunks(这里适合于1 MiB块):

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()

for filename in filenames:
    print(filename, md5(filename))

我想最后,你只打开了一个空文件。其原因是您获取由glob返回的列表,并删除其字符串表示形式中的列表标记(并且仅在使用strip时在字符串的两端)。这给了你类似的东西:

file1.exe' 'file2.exe' 'file3.exe

然后给这个字符串以打开,它将尝试打开一个名为的文件。事实上,我甚至惊讶于它的工作(除非你只有一个文件)!你应该得到一个FileNotFoundError

您要做的是迭代由glob.glob返回的所有文件:

import glob
import hashlib
file = glob.glob("/root/PycharmProjects/untitled1/*.exe")

for f in file:
    with open(f, 'rb') as getmd5:
        data = getmd5.read()
        gethash = hashlib.md5(data).hexdigest()
        print("f: " + gethash)

相关问题 更多 >

    热门问题