К книге
Приложение к «Python в библиотеке»Arch. 10. Mer.py
56%
Arch. 10. Mer.py
19

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# поиск одинаковых файлов

#

import sys, os

import hashlib #

ex = 'zip'#'fb2'#'txt'#'mp4'#'gif'#'jpg'

GFiles = []

co = 0

LOut = []

def SaveInList(L3):

, ,if len(L3) > 0:

, , , ,global co

, , , ,global LOut

, , , ,for i in L3:

, , , , , ,LOut.append(i+'\n')

, , , , , ,co += 1

, , , ,LOut.append('-----\n\n')

def ScanMd5(L2):

, ,if len(L2) > 0:

, , , ,L3 = []

, , , ,L2.sort()

, , , ,flag = False

, , , ,oldMd5 = ''

, , , ,OldFile = ''

, , , ,for i in L2:

, , , , , ,m = i.split('%')

, , , , , ,ZMd5= m[0]

, , , , , ,if (not flag) and (ZMd5 == oldMd5):

, , , , , , , ,flag = True

, , , , , , , ,L3.append(OldFile)

, , , , , ,if flag:

, , , , , , , ,if ZMd5 == oldMd5:

, , , , , , , , , ,L3.append(m[1])

, , , , , , , ,else:

, , , , , , , , , ,flag = False

, , , , , , , , , ,SaveInList(L3)

, , , , , , , , , ,L3.clear()

, , , , , , , , , ,

, , , , , ,oldMd5 = ZMd5

, , , , , ,OldFile = m[1]

, , , ,SaveInList(L3) #

, ,

def ScanSize(GFiles):

, ,if len(GFiles) > 0:

, , , ,L = []

, , , ,flag = False

, , , ,oldSize = ''

, , , ,OldFile = ''

, , , ,for i in GFiles:

, , , , , ,m = i.split('%')

, , , , , ,Zaize = m[0]

, , , , , ,if (not flag) and (Zaize == oldSize):

, , , , , , , ,flag = True

, , , , , , , ,L.append(getmd5(OldFile)+'%'+ OldFile)

, , , , , ,if flag:

, , , , , , , ,if Zaize == oldSize:

, , , , , , , , , ,L.append(getmd5(m[1])+'%'+ m[1])

, , , , , , , ,else:

, , , , , , , , , ,flag = False

, , , , , , , , , ,ScanMd5(L)

, , , , , , , , , ,L.clear()

, , , , , , , , , , , ,

, , , , , ,oldSize = Zaize

, , , , , ,OldFile = m[1]

, , , ,ScanMd5(L) #

#--------------------------------------------------

def getmd5(file_name):

## try

with open(file_name, "rb" ) as file_to_check:

data = file_to_check.read()

return hashlib.md5(data).hexdigest()

def parse_file(fn):

, ,global GFiles

, ,s=str(os.path.getsize(fn))+'%'#

, ,GFiles.append(s+fn)

, , , ,

def parse_dir(sSrc):

, ,global f_list

, ,for file in os.listdir(sSrc):

, , , ,# full pathname

, , , ,file=os.path.join(sSrc,file)

, , , ,if os.path.isdir(file):

, , , , , ,parse_dir(file)

, , , ,else:

, , , , , ,m = file.split('.')[-1] # извлечение расширения

, , , , , ,m = m.lower()

, , , , , ,if (m == ex):

, , , , , , , ,parse_file(file)

, , , , , , , ,

#--------------------------------------------------

path = os.getcwd()

parse_dir(path)

GFiles.sort()

ScanSize(GFiles) #

if co > 0:

f = open('merg_'+ex+'.txt', 'w')

for i in LOut:

, , f.write(i+'\n')

f.close()

print('Done '+ex+' -> '+str(co))

Предыдущая главаГлава 19 из 34Следующая глава