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 같은 버전 관리 시스템이나,
백업 솔루션 등을 고려해 봐야겠지요...
반응형