파이썬과의 파일 및 디렉토리 비교
2019 년 1 월 7 일
파이썬 표준 라이브러리는 파일 시스템 처리를 포함한 강력한 도구 세트를 제공합니다. 이 빠른 작은 문서에서 당신은 파일 및 디렉토리를 비교하는 유용한 조리법의 몇 가지를 볼 수 있습니다.
당신이 통해 쟁기 어려운 파일 및 폴더(여기,또는 여기 등)의 고통스러운 혼란이있을 때,파이썬은 검색 및 비교를 자동화하는 당신의 친구입니다. 그런 다음 각 파일을 수동으로 처리하는 대신 파일 및 디렉토리의 자동 처리,수정 또는 삭제와 결합 할 수 있습니다.
공정한 경고:항상 확인하고 다른 사람의 사이에서,삭제,이름 바꾸기,복사 등의 작업을 사용하여 파일 시스템을 수정할 때 제대로 코드를 테스트합니다. 또한 중요한 파일의 여러 복사본을”두 개는 하나이고 하나는 없음”으로 유지하십시오.
filecmp
모듈에서 두 파일을 비교할 수있는cmp()
기능을 찾을 수 있습니다. 기본적으로 비교는 얕은(shallow=True
)이는 운영 체제 만 의미합니다.두 파일의 합계()서명(크기,수정 날짜 등)이 비교됩니다. shallow=False
를 설정하여 비교는 더 많은 시간이 걸리는 파일의 내용을 비교하여 수행됩니다. 다음은 폴더의 모든 중복 항목을 찾는 데 사용할 수 있는 스니펫입니다:
import osimport itertoolsimport filecmpfiles = os.listdir('path/to/directory')for f1, f2 in itertools.combinations(files, 2): if filecmp.cmp(f1, f2): print(f1, f2)
이것은 수학적으로 정확한 유형 계층구조인,강력한 타입을 정의합니다. 이 경우 파일 목록의 길이 2 의 모든 순열을 반환하는 조합()함수를 볼 수 있습니다. 이렇게 하면 각 파일이 목록의 다른 파일과 비교됩니다. 폴더의 모든 파일을 재귀적으로 검색하려면 이전 코드에서files = os.listdir('...')
를:
files = for (dirpath, dirnames, filenames) in os.walk('.'): for f in filenames: files.append(os.path.join(dirpath, f))
또한 디렉토리를 다이어 크 클래스와 비교할 수도 있습니다. 다음 코드 조각은 두 폴더를 재귀적으로 진행하며 이름이 같지만 다른 모든 파일을 표시하고 왼쪽 또는 오른쪽 파일 경로에 있는 모든 파일을 나열합니다:
import filecmpc = filecmp.dircmp(filepath1, filepath2)def report_recursive(dcmp): for name in dcmp.diff_files: print("DIFF file %s found in %s and %s" % (name, dcmp.left, dcmp.right)) for name in dcmp.left_only: print("ONLY LEFT file %s found in %s" % (name, dcmp.left)) for name in dcmp.right_only: print("ONLY RIGHT file %s found in %s" % (name, dcmp.right)) for sub_dcmp in dcmp.subdirs.values(): print_diff_files(sub_dcmp)report_recursive(c)
같은 이름을 가진 여러 폴더를 가지고 있지만(백업 폴더의 다른 버전 등)같은 내용이있는 경우 당신은 아무 생각이 경우에 좋은 방법입니다. 당신이 전에 파일 비교에서 본 것처럼이 만 얕은 비교를 수행하는 것을 명심하십시오.