ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (서브 폴더 포함) 전체 파일 해시 추출
    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 같은 버전 관리 시스템이나,
    백업 솔루션 등을 고려해 봐야겠지요... 

     

    반응형
Designed by Tistory.