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

0 投票
2 回答
2511 浏览
提问于 2025-04-16 12:37

我正在用Python做一个小项目。我有一堆文件,想要获取它们的md5校验和。然后把这些校验和存到另一个列表里。接着再检查一下,看看它们是否有不同。我已经写好了获取校验和的函数,但现在我不知道怎么把它们添加到列表里。以下是我尝试的代码:


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 个回答

1

你并不是在处理4个列表。每次你调用 getmd5 时,都是在把一个md5哈希值加到 md5s 这个列表里,然后你又打印出这个列表的内容。恰好因为你的文件列表里有4个项目,所以你总共做了4次这个操作。

这就意味着你只有一个列表,最后在循环结束时,这个列表里会包含所有的md5值。你在构建列表的循环里打印内容,所以你可能没法理解这个结果。把打印语句的缩进去掉,就能看到你想要的格式了。

2

当然可以!请看下面的内容:

在编程中,有时候我们需要让程序根据不同的情况做出不同的反应。这就像是你在生活中遇到不同的事情时,会选择不同的方式来处理。例如,如果下雨了,你可能会选择带伞;如果天气晴朗,你就可以选择不带伞。

在代码中,我们可以使用“条件语句”来实现这种功能。条件语句就像是一个判断的工具,它会检查某个条件是否成立,然后根据结果执行不同的代码。比如,如果条件成立,就执行一段代码;如果不成立,就执行另一段代码。

这样,我们的程序就能根据不同的情况做出不同的反应,变得更加灵活和智能。

希望这个解释能帮助你更好地理解条件语句的概念!

def getmd5(filename, ....):

  return m.hexdigest()


md5s = dict()

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

print md5s

撰写回答