OS: MAC
참고: 👉 점프 투 파이썬 - 라이브러리 예제 바로가기
038. 디렉터리와 파일을 비교하려면? ― filecmp(파일캠프)
| 구분 | 설명 | 예시 | 결과 |
| 모듈 이름 | 파일 또는 디렉터리 간의 내용 비교를 수행하는 모듈 - 두 파일이 같은지 비교 (cmp) - 두 폴더를 비교 (dircmp) |
import filecmp | — |
| 파일 비교 (cmp) |
두 파일의 내용이 같은지 확인 | import filecmp print(filecmp.cmp('a.txt', 'b.txt')) |
두 파일이 같으면 True, 다르면 False |
| 파일 비교 - 엄격 모드 | 파일 내용 and 수정 시간까지 비교 | filecmp.cmp('a.txt', 'b.txt', shallow=False) | 시간/내용 모두 같아야 True |
| 디렉터리 비교 (dircmp) |
두 디렉터리를 비교하는 객체 생성 | cmp = filecmp.dircmp('dir1', 'dir2') | cmp.report()로 비교 결과 요약 |
| 디렉터리 비교 결과 요약 | report() : 간단 요약 출력 report_full_closure() : 하위 폴더까지 전체 비교 |
cmp.report() cmp.report_full_closure() |
터미널에 비교 결과 표시 |
| 결과 속성 | - left_only : 왼쪽 폴더에만 있는 파일 - right_only : 오른쪽 폴더에만 있는 파일 - common_files : 둘 다 있는 파일 - diff_files : 내용이 다른 파일 |
print(cmp.left_only) print(cmp.diff_files) |
각각 목록이 리스트로 출력됨 |
라이브러리 예제 문제:

문제를 풀기위해 폴더를 생성 후 진행한다.

039. 임시로 만든 파일을 이용하려면? ― tempfile(템프파일)
| 구분 | 설명 | 예시 | 결과 |
| 모듈 이름 | 임시 파일or 디렉터리를 쉽게 만들 수 있는 표준 라이브러리 |
import tempfile | - 프로그램 실행 중 임시 저장공간 제공 - 사용이 끝나면 자동 삭제됨 |
| 임시 파일 생성 |
자동으로 삭제되는 임시 파일 생성 |
import tempfile with tempfile.TemporaryFile(mode='w+') as tmp: tmp.write('Hello Tempfile!') tmp.seek(0) #파일 포인터를 맨 앞으로 이동 print(tmp.read()) |
15 0 Hello Tempfile! # 임시 파일에 작성 후 즉시 읽기 (닫히면 자동 삭제됨) |
| 임시 파일 이름 확인 |
이름이 있는 임시 파일 생성 |
f = tempfile.NamedTemporaryFile(delete=False) print(f.name) f.close() |
/var/folders/.../tmpabcd1234 # 형태의 경로 표시 |
| 임시 디렉터리 생성 | 자동 삭제되는 임시 폴더 |
with tempfile.TemporaryDirectory() as tmpdir: print(tmpdir) |
/var/folders/.../tmpxyz # 자동 삭제 |
| 시스템 임시 폴더 경로 확인 | 운영체제가 임시 파일을 저장하는 기본 경로 확인 |
print(tempfile.gettempdir()) | /var/folders/.../T |
| 임시 파일 접두사· 접미사 지정 |
파일 이름 형식 커스터마이징 |
f = tempfile.NamedTemporaryFile(prefix='log_', suffix='.txt', delete=False) print(f.name) |
/var/.../log_abcd1234.txt |
라이브러리 예제 문제:


040. 파일을 찾으려면? ― glob(글랍)
- os 모듈보다 간단하게 파일 검색 가능, 하위 폴더 포함 검색 가능, 패턴 매칭으로 조건 검색 가능
| 구분 | 설명 | 예시 | 결과 |
| 모듈 이름 (발음) | 파일 이름 패턴 매칭으로 파일을 검색하는 모듈 | import glob | — |
| 기본 사용 | 지정한 패턴(*, ?, [])에 맞는 파일을 리스트로 반환 | import glob glob.glob("*.txt") |
['b.txt', 'a.txt'] #사용자마다 다를 수 있음 |
| 하위 폴더 포함 검색 | **와 recursive=True를 함께 사용하면 하위 디렉터리까지 검색 가능 |
import glob glob.glob("**/*.py", recursive=True) |
출력값 없음. 현재 폴더 및 하위 폴더에 .py 확장자 파일이 없기 때문. #사용자마다 다를 수 있음 |
| 패턴 기호 | *: 모든 문자(0개 이상) ?: 임의의 한 문자 [abc]: 괄호 안 문자 중 하나 **: 하위 폴더 전체 |
glob.glob("*.txt") glob.glob("data?.csv") glob.glob("**/*.py", recursive=True) |
각 조건에 맞는 파일 목록 반환 |
| 반복자 반환 |
메모리 절약을 위해 반복자(iterator) 형태로 반환 |
for f in glob.iglob("*.txt"): | 파일을 하나씩 순차적으로 읽음 |
| 파일 내용 출력 예시 | 현재 폴더의 모든 .txt 파일 내용을 읽어 각 파일명과 내용 출력 |
for f in glob.glob('*.txt'): with open(f) as file: print(f, file.read()) |
b.txt Hello from B Line 2 a.txt Hello from A Line 2 |
라이브러리 예제 문제:특정 폴더에 어떤 텍스트 파일이 있는지 확인하고자 한다. 이를 위해 현재 폴더와 그 안에 있는 모든 하위 폴더에서 텍스트 파일(*.txt)을 찾아서 파일 이름을 출력하려면 어떻게 프로그램을 작성해야 할까?


.tip
방식 코드 하위 폴더까지 반환형. sorted()로 정렬하면 순서도 일정하게 유지됨.
| 방식 | 코드 | 하위폴더까지 | 반환형 |
| pathlib.Path.glob() | Path('.').glob('*.txt') | ❌ 현재 폴더만 | generator |
| pathlib.Path.rglob() | Path('.').rglob('*.txt') | ✅ 하위폴더포함 | generator |
| glob.glob() | glob.glob('*.txt') | ❌ 현재 폴더만 | list |
| glob.glob(..., recursive=True) | glob.glob('**/*.txt', recursive=True) | ✅ 하위폴더포함 | list |