计算列表中文件的MD5校验和
我正在用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