-
(서브 폴더 포함) 전체 파일 해시 추출Python/이것저것 파이썬 2022. 10. 28. 09:57반응형
[Q] 폴더와 파일 이름과 용량 등을 비교하여 파일 매칭을 해야하는데요.
네트워크로는 공유가 안되고 복사하기엔 용량이 너무 큰 상태입니다.-------------------------------
[A] 각 PC에서, 파일 패스, 파일 사이즈, 해시값을 출력한 뒤
이 값들을 비교하는 게 좋을 것 같습니다.해시의 원리상
같은 파일일 경우 해시 값은 항상 같습니다.
다른 파일일 경우 해시 값이 같을 확률이 아주 약간 있습니다만,
파일 크기까지 비교한다면 그 확률을 더 줄일 수 있습니다.import os import hashlib def check_dir(path): for root, _, files in os.walk(path): for file in files: joined_path = os.path.join(root, file) with open(joined_path, 'rb') as f: print( hashlib.md5(f.read()).hexdigest(), os.path.getsize(joined_path), joined_path ) check_dir('c:/')
간단히 print문으로 코딩했지만,
csv 등으로 출력 후 pandas, sqlite 또는 액셀을 사용한다면
더 빠르게 처리할 수 있을 겁니다.import os import hashlib import csv def check_dir(path): with open('path_md5.csv', 'w', newline='') as csv_f: csv_writer = csv.writer(csv_f) for root, _, files in os.walk(path): for file in files: joined_path = os.path.join(root, file) print(joined_path) with open(joined_path, 'rb') as f: csv_writer.writerow([hashlib.md5(f.read()).hexdigest(), os.path.getsize(joined_path), joined_path]) check_dir('c:/')
만약 이런 일을 반복적으로 해야한다면..
Git 같은 버전 관리 시스템이나,
백업 솔루션 등을 고려해 봐야겠지요...반응형