Вычисление контрольных сумм MD5 для файлов в списке - PullRequest
0 голосов
/ 27 февраля 2011

Я работаю над небольшим проектом на Python. У меня есть список файлов, для которых я хочу получить md5checksums. Затем он сохраняет контрольные суммы в другом списке. Затем он снова проверяет и проверяет, отличаются ли они. У меня есть функция для получения контрольных сумм, но сейчас я не могу понять, как добавить их в список. Вот что я пытаюсь

<code>
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)</p>

<p>for i in lists:
    getmd5(i)
    print md5s
Но когда я пытаюсь это сделать, я получаю 4 списка примерно так:
<code>
['729aebf5b3a841d3ef815e297ae2ce07']
['729aebf5b3a841d3ef815e297ae2ce07', '1c9bc3339234fa7d551bdb8da004c8ad']
['729aebf5b3a841d3ef815e297ae2ce07', '1c9bc3339234fa7d551bdb8da004c8ad', '0c01d98119386db13beb1bfdbae7ba2b']
['729aebf5b3a841d3ef815e297ae2ce07', '1c9bc3339234fa7d551bdb8da004c8ad', '0c01d98119386db13beb1bfdbae7ba2b', 'b51c93a2f965b75de903d159720dd6e6']

То, что я хотел бы сделать, это сохранить каждую контрольную сумму хеша в списке md5s и затем прочитать, чтобы увидеть, отличаются ли они.

Ответы [ 2 ]

2 голосов
/ 27 февраля 2011
def getmd5(filename, ....):

  return m.hexdigest()


md5s = dict()

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

print md5s
1 голос
/ 27 февраля 2011

У вас нет 4 списков. Вы печатаете содержимое md5s каждый раз после вызова getmd5, который добавляет один хэш md5 в список. Вы просто делаете это 4 раза, потому что в вашем списке файлов 4 элемента.

Это означает, что у вас есть один список, и он содержит все дайджесты в конце последнего цикла for. Вы печатаете внутри цикла for, создающего список, и, следовательно, вы не можете его понять. Удалите отступ перед печатью, чтобы увидеть результат в нужном формате.

...