[파이썬] shutil로 파일간의 차이점 비교하기

파일을 다룰 때 종종 두 개의 파일을 비교해야 할 때가 있습니다. 이를 위해 shutil 모듈을 사용하여 파일 간의 차이점을 비교할 수 있습니다. shutil 모듈은 파일 및 디렉토리 작업을 지원하는 파이썬 내장 모듈입니다.

1. shutil의 compare_files() 함수

Shutil 모듈은 파일간의 차이점을 비교하기 위해 compare_files(filename1, filename2) 함수를 제공합니다. 이 함수는 두 개의 파일을 인자로 받아 파일 내용을 비교하고 불일치하는 부분을 찾아냅니다.

import shutil

file1 = "path/to/file1.txt"
file2 = "path/to/file2.txt"

diff = shutil.compare_files(file1, file2)

if diff:
    print("차이점이 존재합니다.")
else:
    print("파일은 동일합니다.")

위 코드에서는 file1file2라는 두 개의 파일을 비교하고, 차이점이 있는지 검사하는 코드입니다. compare_files() 함수는 차이점이 있을 경우 True를 반환하고, 차이점이 없을 경우 False를 반환합니다.

2. 파일 비교 결과 출력

파일간에 차이점이 있는 경우, 일반적으로 차이점의 위치 및 내용을 알고 싶을 수 있습니다. 이를 위해 filecmp 모듈의 dircmp 클래스를 사용할 수 있습니다.

import shutil
import filecmp

file1 = "path/to/file1.txt"
file2 = "path/to/file2.txt"

diff = shutil.compare_files(file1, file2)

if diff:
    cmp = filecmp.dircmp(file1, file2)
    cmp.report()
    cmp.report_full_closure()

위 코드에서는 compare_files() 함수로 차이점이 있는지 검사한 후, 차이점이 있을 경우 dircmp() 함수를 사용하여 파일 비교 결과를 얻습니다. report() 함수는 파일들 간의 차이점 보고서를 출력하고, report_full_closure() 함수는 모든 하위 디렉토리를 포함한 완전한 결과를 출력합니다.

3. 파일 비교 알고리즘 변경

기본적으로 compare_files() 함수는 파일의 전체 내용을 비교합니다. 하지만 때로는 파일 크기 또는 수정 날짜와 같은 특정 속성만 비교하고 싶을 수 있습니다. 이를 위해 compare_files() 함수의 동작을 변경할 수 있습니다.

import shutil
import filecmp

file1 = "path/to/file1.txt"
file2 = "path/to/file2.txt"

filecmp.cmpfiles(file1, file2, shallow=False)

shallow 매개변수를 True로 설정하여 파일 크기와 수정 날짜만 비교할 수 있습니다. 원하는 속성을 비교하려면 해당 매개변수를 설정하면 됩니다.

결론

shutil 모듈은 파이썬에서 파일 비교 작업을 손쉽게 수행할 수 있는 강력한 도구입니다. compare_files() 함수를 사용하여 파일 내용을 비교하고, dircmp 클래스를 사용하여 차이점을 자세히 알 수 있습니다. 또한 파일 비교 알고리즘을 변경하여 필요한 속성만 비교할 수도 있습니다. 파이썬을 사용하여 파일간의 차이점을 비교하고 싶을 때는 shutil 모듈을 활용하세요!