Sh4n3e
[Python] 이름만 다른 동일 파일 삭제하기 본문
사진을 정리해야할 일이 생겼다.
하지만 이름은 다르지만 똑같은 사진이 너무 많았다.
어찌정리할까 생각하다가 파이썬으로 간단하게 프로그램을 작성해 보았다.
기본원리는 다음과 같다.
1. 파일 Size가 같다면, 동일 파일일 가능성이 높다.(Greedy)
2. 동일 파일을 구분하기 위해서 전체적으로 비교하기보다는 해당파일의 바이너리를 일정 사이즈 단위로 불러와 Hash값을 만들어 비교한다.
해당 소스는 아래와 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | import os, sys import hashlib file_list = [] cnt = 0 path = '/Users/leekeezz/Desktop/picture' def filelist(path): global file_list global cnt file_list = os.listdir(path) file_list.sort() cnt = len(file_list) def getHash(path, blocksize=65536): try : file = open(path, 'rb') except os.error: print 'file is deleted!!!!' return 'x' hasher = hashlib.md5() buf = file.read(blocksize) while len(buf) > 0 : hasher.update(buf) buf = file.read(blocksize) file.close() return hasher.hexdigest() filelist(path) #Get the file list at path for i in file_list: DPath = path + '/' + i if DPath == '/Users/leekeezz/Desktop/picture/.DS_Store': continue; n1 = os.path.getsize(DPath) hash1 = getHash(DPath) print 'Search the file that equal to %s : %s // filesize : %dbytes'%(hash1,DPath,n1) for j in file_list: if i==j: continue D2Path = path + '/' + j if D2Path == '/Users/leekeezz/Desktop/picture/.DS_Store': continue; try : n2 = os.path.getsize(D2Path) except os.error: print "file is deleted!" continue if n1 == n2: print 'Detect Equal size file!! %s %s'%(i,j) hash2 = getHash(D2Path) if hash1 == hash2: print '%s is equal %s, so file Deleted'%(i,j) os.remove(D2Path) | cs |
'Programming > Python' 카테고리의 다른 글
[Python] 웹 크롤러(Web Crawler)를 제작해보자 (1) | 2018.03.13 |
---|---|
[Python] Unicode JSON을 Ascii 형태의 Dictionary로 변환 그리고 CSV로 저장하기 (0) | 2017.11.03 |
[Python] PIL을 이용한 exif정보를 통해 JPG파일의 이름을 타임스탬프로 변경하기 (0) | 2017.10.29 |
[Python] Urllib 사용법, Url 라이브러리 사용법 (0) | 2017.09.08 |
[Python] iPhone으로 찍은 사진의 Timestamp를 파일명으로 바꾸기 (0) | 2017.08.20 |
Comments