파이썬 shutil, glob 라이브러리: 파일 및 디렉토리 관련 작업 수행

파이썬 shutil, glob 라이브러리: 파일 및 디렉토리 관련 작업 수행

파이썬은 강력한 파일 및 디렉토리 관련 작업을 지원하는 표준 라이브러리인 shutil과 glob을 제공합니다. 이 두 라이브러리를 통해 파일 복사, 이동, 삭제, 디렉토리 생성 및 삭제, 패턴 매칭을 통한 파일 검색 등의 작업을 쉽게 수행할 수 있습니다. 이번 글에서는 shutil과 glob 라이브러리의 주요 기능에 대해 알아보겠습니다.

1. shutil 라이브러리

shutil 라이브러리는 고수준의 파일 및 디렉토리 작업을 지원합니다. 이 라이브러리를 사용하면 파일 및 디렉토리의 복사, 이동, 삭제 등의 작업을 쉽게 수행할 수 있습니다. 이제 shutil의 주요 기능에 대해 알아보겠습니다.

1. 파일 및 디렉토리 복사

shutil 라이브러리는 copy(), copy2(), copytree() 등의 함수를 통해 파일 및 디렉토리의 복사 작업을 지원합니다.

import shutil

# 파일 복사
shutil.copy('source.txt', 'destination.txt')  # source.txt 파일을 destination.txt로 복사합니다. 이 때 destination.txt가 이미 존재하면 덮어씁니다.

# 파일 복사
shutil.copy('C:/study/python/shutil/source.txt', 'C:/Temp/')  # C:/study/python/shutil/source.txt 파일을 C:/Temp/ 디렉토리에 같은 이름, source.txt로 복사합니다. 동일한 이름의 파일이 이미 있으면 덮어씁니다.

# 디렉토리 복사
shutil.copytree('source_directory', 'destination_directory')  # source_directory 디렉토리 전체를 destination_directory로 복사합니다. 이 때 destination_directory가 이미 존재하면 오류가 발생합니다.

# 디렉토리 복사
shutil.copytree('C:/study/python/shutil/source', 'C:/Temp/source')  # C:/study/python/shutil/source 디렉토리 전체를 C:/Temp/ 위치에 source라는 이름의 디렉토리로 복사합니다. 동일한 이름의 디렉토리가 이미 있으면 오류가 발생합니다.

shutil.copy()와 shutil.copy2() 모두 파일을 복사하는 기능을 수행하지만, 복사하는 파일의 메타데이터에 차이가 있습니다. 따라서, shutil.copy2()는 shutil.copy()보다 파일의 상세한 메타데이터까지 복사하고 싶을 때 사용합니다.

2. 파일 및 디렉토리 이동 및 이름 변경

shutil 라이브러리는 move() 함수를 통해 파일 및 디렉토리의 이동 및 이름 변경 작업을 지원합니다.

import shutil

# 파일 이동 및 이름 변경
shutil.move('source.txt', 'destination.txt')  # source.txt 파일을 destination.txt로 이동하면서 이름을 변경합니다.

# 파일 이동
shutil.move('C:/study/python/shutil/source.txt', 'C:/Temp/')  # C:/study/python/shutil/source.txt 파일을 C:/Temp/ 디렉토리로 이동합니다. 동일한 이름의 파일이 이미 있으면 덮어씁니다.

# 디렉토리 이동 및 이름 변경
shutil.move('source_directory', 'destination_directory')  # source_directory 디렉토리를 destination_directory로 이동하면서 이름을 변경합니다.

# 디렉토리 이동
shutil.move('C:/study/python/shutil/source_directory', 'C:/Temp/')  # C:/study/python/shutil/source_directory 디렉토리를 C:/Temp/ 디렉토리로 이동합니다. 동일한 이름의 디렉토리가 이미 있으면 오류가 발생합니다.

참고로, shutil.move() 함수는 이름 변경 없이 디렉토리나 파일을 이동할 때도 사용할 수 있습니다. 이때, 대상 위치에 이미 같은 이름의 파일이나 디렉토리가 있을 경우 덮어쓰기를 수행합니다. 디렉토리의 경우, 대상 위치에 이미 같은 이름의 디렉토리가 존재하면 오류가 발생하니 주의해야 합니다.

3. 디렉토리와 그 하위의 모든 파일 및 디렉토리를 삭제

shutil 라이브러리는 rmtree() 함수를 통해 디렉토리를 재귀적으로 삭제하는 작업을 지원합니다.

import shutil

# 디렉토리와 그 하위의 모든 파일 및 디렉토리를 삭제
shutil.rmtree('directory')  # directory 디렉토리와 그 하위의 모든 파일 및 디렉토리를 삭제합니다.

4. 파일 삭제

파일을 삭제하려면, 파이썬의 기본 제공 라이브러리인 ‘os’ 모듈의 remove() 함수를 사용할 수 있습니다.

import os

os.remove('C:/Temp/source.txt')  # C:/Temp/source.txt 파일을 삭제합니다.

shutil.rmtree()은 디렉토리와 그 하위의 모든 파일 및 디렉토리를 삭제하는데 사용되지만, 단일 파일을 삭제하려면 os.remove() 함수를 사용해야 합니다.

2. glob 라이브러리

glob 라이브러리는 유닉스 셸 스타일의 경로명 패턴 확장을 지원합니다. 이는 특정 패턴을 사용하여 파일이나 디렉토리를 검색할 수 있게 해줍니다. 예를 들어, “*.txt”는 모든 txt 파일을 의미하며, “data/*.csv”는 ‘data’ 디렉토리에 있는 모든 csv 파일을 의미합니다. 이 라이브러리를 사용하면 특정 패턴에 맞는 파일 및 디렉토리를 쉽게 찾을 수 있습니다. 이제 glob의 주요 기능에 대해 알아보겠습니다.

패턴 매칭을 통한 파일 검색

glob 라이브러리는 glob() 함수를 통해 특정 패턴에 맞는 파일 및 디렉토리를 검색하는 기능을 제공합니다.

import glob

# 특정 확장자를 가진 파일 검색
for filename in glob.glob('*.txt'):
    print(filename)  # .txt 확장자를 가진 모든 파일을 출력합니다.

# 재귀적으로 모든 디렉토리를 검색
for filename in glob.glob('**/*.txt', recursive=True):
    print(filename)  # 모든 디렉토리에 있는 .txt 확장자를 가진 파일을 출력합니다.

# "c:/temp/" 아래 모든 디렉토리에 있는 .txt 확장자를 가진 파일을 검색
for filename in glob.glob('c:/temp/**/*.txt', recursive=True):
    print(filename)  # .txt 확장자를 가진 모든 파일을 출력합니다.

참고 자료

함께 보면 좋은 이전 게시글

위로 스크롤