본문 바로가기

미래 먹거리를 위하여

[파이썬 정복하기] 라이브러리 6장 - 파일과 디렉터리 다루기2 (맥OS 기준) ★ 파일 처리 관련 라이브러리 — filecmp, tempfile, glob

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)
각각 목록이
리스트로 출력됨

라이브러리 예제 문제: 

점프 투 파이썬 - 라이브러리 예제 편 6장 38번 문제

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

점프 투 파이썬 - 라이브러리 예제 편 6장 38번 문제 해석 및 결과

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

라이브러리 예제 문제: 

점프 투 파이썬 - 라이브러리 예제 편 6장 39번 문제
점프 투 파이썬 - 라이브러리 예제 편 6장 39번 문제 해석 및 결과

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)을 찾아서 파일 이름을 출력하려면 어떻게 프로그램을 작성해야 할까?

점프 투 파이썬 - 라이브러리 예제 편 6장 40번 문제 해석 및 결과 1
점프 투 파이썬 - 라이브러리 예제 편 6장 40번 문제 해석 및 결과 2(최신 풀이버전)

.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