Выберите и сравните два файла MD5, используя Python - PullRequest
0 голосов
/ 06 марта 2020

Я хотел бы манипулировать кодом из ответа, найденного по следующей ссылке: Сравнить md5-хэши двух файлов в python

Мой ожидаемый результат - поиск два файла, которые я хочу сравнить, а затем выполнить оставшуюся часть сценария, чтобы получить ответ о том, соответствует ли «True» файлам MD5, в противном случае - «False».

Я пробовал следующий код:

import hashlib
from tkinter import *
from tkinter import filedialog

digests = []

z = filedialog.askopenfilenames(initialdir="/", title="Browse Files", filetypes=(("excel files", "*.xlsx"),
                                                                                             ("all files", "*.*")))

b = filedialog.askopenfilenames(initialdir="/", title="Browse Files", filetypes=(("excel files", "*.xlsx"),
                                                                                             ("all files", "*.*")))
filez = z, b

for filename in filez:
    hasher = hashlib.md5()
    with open(filename, 'rb') as f:
        buf = f.read()
        hasher.update(buf)
        a = hasher.hexdigest()
        digests.append(a)
        print(a)

print(digests[0] == digests[1])

К сожалению, я получаю следующую ошибку: «Ошибка типа: ожидаемый объект str, bytes или os.PathLike, не кортеж»

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 06 марта 2020

filedialog.askopenfilenames возвращает кортеж. Это означает, что z и b, и, в свою очередь, итератор filename для l oop, являются кортежами. Вы получаете ошибку, потому что передаете filename, который является кортежем, в функцию open.

Чтобы исправить это, можно просто объединить кортежи.

filez = z + b
0 голосов
/ 06 марта 2020

Исправлена ​​ошибка выше, как указано с использованием этой строки кода:

filez = z[0], b[0]

...