Вы тестируете в цикле .Для каждой строки, которая не совпадает, вы загружаете:
line1
if hash in line:
print something
else
download
line2
if hash in line:
print something
else
download
line3
if hash in line:
print something
else
download
Если хэш находится в строке 1, то вы все равно скачиваете, потому что хэш находится не в строке 2 или строке 3. Вы не должны принимать решениезагружать до тех пор, пока вы не протестируете все строки .
Лучший способ сделать это - прочитать все хеши за один раз в наборе объекта (потому что тестирование на предмет соответствия для набора быстрее).Удалите разделители строк:
try:
with open(fn) as hashfile:
hashes = {line.strip() for line in hashfile}
except IOError:
# no file yet, just use an empty set
hashes = set()
, затем при тестировании новых хэшей используйте:
urlhash = computeMD5hash(formation)
if urlhash not in hashes:
# not seen before, download
# record the hash
hashes.add(urlhash)
with open(fn, 'a') as hashfile:
hashfile.write(urlhash + '\n')