计算列表中文件的MD5校验和

时间:2011-02-27 18:00:43

标签: python list hash md5 checksum

我正在使用Python开发一个项目。我有一个文件列表,我想得到md5checksums。然后它将校验和存储在另一个列表中。然后它再次检查并检查它们是否不同。我有使校验和工作的功能,但现在我无法弄清楚如何将它们添加到列表中。这是我正在尝试的


import sys, hashlib
files = ['/home/file1', '/home/file2', '/home/file3', '/etc/passwd']
md5s = []
def getmd5(file, ex="", inc=""):
    m = hashlib.md5()
    try:
        fd = open(file,"rb")
    except IOError:
        print "Can't retrieve MD5sum for ", file
        pass
    content = fd.readlines()
    fd.close()
    for eachLine in content:
        if ex and eachLine.startswith(ex):
            continue
        m.update(eachLine)
    m.update(inc)
    a = m.hexdigest()
    md5s.append(a)

for i in lists: getmd5(i) print md5s

但是当我尝试这个时,我会得到4个这样的列表:

['729aebf5b3a841d3ef815e297ae2ce07']
['729aebf5b3a841d3ef815e297ae2ce07', '1c9bc3339234fa7d551bdb8da004c8ad']
['729aebf5b3a841d3ef815e297ae2ce07', '1c9bc3339234fa7d551bdb8da004c8ad', '0c01d98119386db13beb1bfdbae7ba2b']
['729aebf5b3a841d3ef815e297ae2ce07', '1c9bc3339234fa7d551bdb8da004c8ad', '0c01d98119386db13beb1bfdbae7ba2b', 'b51c93a2f965b75de903d159720dd6e6']

我想要做的是将每个哈希校验和存储在md5s列表中,然后阅读以查看它们是否不同。

2 个答案:

答案 0 :(得分:2)

def getmd5(filename, ....):

  return m.hexdigest()


md5s = dict()

for fname in filenames:
   md5s[fname] = getmd5(fname)

print md5s

答案 1 :(得分:1)

您没有4个列表。每次调用md5s后,您都会打印getmd5的内容,这会向列表中添加一个md5哈希值。你碰巧这样做了4次,因为你的文件列表中有4个项目。

这意味着您有一个列表,它包含最后一个for循环的所有摘要。您正在构建列表的for循环内打印,因此您无法理解它。在打印之前删除缩进以查看所需格式的结果。