Считать дубликаты файлов

Я новичок в Python и хочу посчитать содержимое в текстовых файлах 60 КБ, которые являются одинаковыми, и перечислить все различное содержимое с количеством, сколько одинаковых, что-то вроде uniq -c но на уровне файла, а не строки.

Пока что у меня есть:

from os import listdir
from os.path import isfile, join

mypath = "C:\Users\daniel.schneider\Downloads\Support"  # my Filepath
onlyfiles = [ f for f in listdir(mypath) if isfile(join(mypath,f)) ]

for currentFile in onlyfiles:
    currentPath = mypath + '\\' + currentFile
    f = open(currentPath)
    print currentPath
    for currentLine in currentFile:
        print currentLine[24:]      
    f.close()
    break   

1 ответ

Решение

Я не проверил это полностью, но вы могли бы использовать Python hashlib чтобы получить хэш MD5 для каждого файла и сохранить имена файлов в list связанный с каждым хэшем в словаре.

Затем, чтобы получить уникальный контент с подсчетом количества файлов, в которых он появляется, выполните итерацию по словарю:

import os
import hashlib

mypath = 'testdup'
onlyfiles = [f for f in os.listdir(mypath)
                if os.path.isfile(os.path.join(mypath,f)) ]

files = {}
for filename in onlyfiles:
    filehash = hashlib.md5(open(os.path.join(mypath, filename), 'rb')
                              .read()).hexdigest()
    try:
        files[filehash].append(filename)
    except KeyError:
        files[filehash] = [filename]

for filehash, filenames in files.items():
    print('{0} files have this content:'.format(len(filenames)))
    print(open(os.path.join(mypath,filenames[0])).read())
Другие вопросы по тегам