파이썬 shutil 라이브러리 : 파일 및 디렉토리 다루기 3

파이썬 shutil 라이브러리는 파일 및 디렉토리 작업을 위한 유용한 함수들을 제공하는 파이썬 표준 라이브러리 중 하나입니다.

shutil 라이브러리파일 및 디렉토리 관리를 보다 쉽게 처리하기 위한 고수준의 인터페이스를 제공합니다.

단순 파일명 변경, 복사, 이동 뿐만 아니라 압축 파일의 압축 및 해제, 동기화, 권한 등을 처리할 수 있는 기능이 있습니다.

파일 및 디렉토리 관리

요약 정리

함수설명/특징예제 사용법
shutil.copy(src, dst, *, follow_symlinks=True)파일의 내용과 권한을 대상 파일로 복사합니다.shutil.copy('소스.txt', '대상.txt')
shutil.copy2(src, dst, *, follow_symlinks=True)shutil.copy()와 동일하지만, 마지막 수정 시간 및 액세스 시간도 복사합니다.shutil.copy2('소스.txt', '대상.txt')
shutil.copyfile(src, dst, *, follow_symlinks=True)파일의 내용을 대상 파일로 복사합니다.shutil.copyfile('소스.txt', '대상.txt')
shutil.copymode(src, dst, *, follow_symlinks=True)권한을 대상 파일로 복사합니다.shutil.copymode('소스.txt', '대상.txt')
shutil.copyfileobj(fsrc, fdst[, length])파일과 유사한 객체(fsrc)의 내용을 다른 파일과 유사한 객체(fdst)로 복사합니다.shutil.copyfileobj(소스_파일, 대상_파일)
shutil.copystat(src, dst, *, follow_symlinks=True)모든 상태 정보(권한, 시간 등)를 대상 파일로 복사합니다.shutil.copystat('소스.txt', '대상.txt')
shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False, dirs_exist_ok=False)디렉토리 및 그 내용을 대상 디렉토리로 복사합니다.shutil.copytree('소스_디렉토리', '대상_디렉토리')
shutil.rmtree(path, ignore_errors=False, onerror=None, *, onexc=None, dir_fd=None)디렉토리와 그 내용을 삭제합니다.shutil.rmtree('삭제할_디렉토리')
shutil.move(src, dst, copy_function=copy2)파일 또는 디렉토리를 다른 위치로 이동하거나 이름을 변경합니다.shutil.move('원본.txt', '이동할_디렉토리/새_이름.txt')
shutil.chown(path, user=None, group=None)파일 또는 디렉토리의 소유자와 그룹을 변경합니다.shutil.chown('파일.txt', user='새_소유자', group='새_그룹')
shutil.which(cmd, mode=os.F_OK, path=None)환경 변수에서 지정된 명령어의 경로를 찾습니다.shutil.which('명령어')

데이터 복사 : shutil.copyfileobj()

shutil.copyfileobj(fsrc, fdst[, length])

함수는 파일 객체(fsrc)에서 다른 파일 객체(fdst)로 데이터를 복사하는 데 사용됩니다. (파일 객체를 기반으로 데이터를 복사합니다.)

  • 매개변수
    • fsrc: 복사하고자 하는 소스 파일 객체입니다. 이는 이미 열려 있는 파일 객체일 수 있습니다.
    • fdst: 복사된 데이터를 저장할 대상 파일 객체입니다. 이 또한 이미 열려 있는 파일 객체일 수 있습니다.
    • length (optional): 복사할 데이터의 길이를 나타내는 옵션 매개변수입니다. 이 매개변수를 생략하면 파일의 끝까지 모든 데이터를 복사합니다. 만약 length가 지정되면, 해당 길이(바이트) 만큼의 데이터를 복사합니다.

이 함수는 소스 파일 객체에서 대상 파일 객체로 데이터를 효과적으로 복사하는 데 사용됩니다. 이는 파일 복사의 간편한 방법 중 하나이며, 대용량 파일의 경우 효율적으로 처리됩니다. 함수를 호출하면 소스 파일의 현재 위치부터 지정된 길이 또는 파일의 끝까지의 데이터가 대상 파일로 복사됩니다.

import shutil

# 소스 파일과 대상 파일 열기
with open('source_file.txt', 'rb') as fsrc, open('destination_file.txt', 'wb') as fdst:
    # 파일 객체 간 데이터 복사 (전체 복사)
    shutil.copyfileobj(fsrc, fdst)

이 코드는 ‘source_file.txt’의 내용을 읽어와서 ‘destination_file.txt’로 복사합니다.

데이터 복사 : shutil.copyfile()

shutil.copyfile(src, dst, *, follow_symlinks=True)


shutil.copyfile(src, dst, *, follow_symlinks=True)
함수는 소스 파일에서 대상 파일로 직접 데이터를 복사하는 데 사용됩니다.

  • 매개변수
    • src: 복사할 소스 파일의 경로입니다.
    • dst: 대상 파일의 경로입니다.
    • follow_symlinks: 기본적으로 True로 설정되어 있으며, 심볼릭 링크를 따를지 여부를 결정합니다. 만약 False로 설정하면 심볼릭 링크 대신 링크의 경로가 복사됩니다.
import shutil

# 소스 파일과 대상 파일의 경로 설정
source_path = 'path/to/source_file.txt'
destination_path = 'path/to/destination_file.txt'

# 심볼릭 링크를 따라가지 않고 데이터를 복사
shutil.copyfile(source_path, destination_path, follow_symlinks=False)

이 코드는 'path/to/source_file.txt'에서 데이터를 읽어와서 'path/to/destination_file.txt'에 직접 복사합니다. 만약 follow_symlinksTrue로 설정되어 있으면 심볼릭 링크를 따라가서 그 링크가 가리키는 파일의 데이터를 복사합니다.

파일 권한 복사 : shutil.copymode()

shutil.copymode(src, dst, *, follow_symlinks=True)

파일의 권한 모드를 복사하는데 사용됩니다.

이 함수는 파일의 권한 모드, UID(사용자 식별자), GID(그룹 식별자)를 대상 파일에 적용합니다.

  • 매개변수
    • src: 복사할 원본 파일의 경로 또는 파일 객체입니다.
    • dst: 복사된 대상 파일의 경로 또는 파일 객체입니다.
    • follow_symlinks: 심볼릭 링크를 따를지 여부를 제어하는 매개변수로, 기본값은 True입니다.

이 함수는 파일 권한 및 모드 정보를 src에서 가져와 dst에 설정합니다.

이 함수는 파일의 권한 모드만을 복사합니다. 따라서 파일 내용을 포함한 다른 모든 속성은 영향을 받지 않습니다.

import shutil

shutil.copymode('source.txt', 'destination.txt')

파일 상태 정보 복사 : shutil.copystat()


shutil.copystat()
함수는 파일의 상태 정보를 복사합니다.

이 함수는 파일의 권한 모드, 시간 정보, 그룹 및 사용자 식별자 등의 속성을 대상 파일로 복사합니다.

하지만 파일 내용은 복사하지 않습니다.

  • 매개변수
    • src : 원본 파일의 경로
    • dst:대상 파일의 경로입니다.
    • follow_symlinks :심볼릭 링크를 따를지 여부를 결정. 만약 follow_symlinksTrue로 설정되면, 심볼릭 링크가 가리키는 파일의 상태를 복사하고, False로 설정되면 심볼릭 링크 파일 자체의 상태를 복사합니다.

이 함수를 사용하면 파일의 상태 정보를 보존하여 원본 파일과 대상 파일 간에 유사한 특성을 유지할 수 있습니다.

파일 복사 : shutil.copy()

shutil.copy(src, dst, *, follow_symlinks=True)

이 함수를 사용하면 파일의 내용이 복사되며, 원본 파일과 대상 파일 간에는 동일한 내용이 유지됩니다.

파일 복사를 수행할 때 권한 정보도 복사됩니다.

생성 및 수정 날짜와 같은 메타데이터를 복사되지 않습니다.

import shutil

src_file = 'path/to/source/file.txt'
dst_file = 'path/to/destination/file.txt'

shutil.copy(src_file, dst_file)

파일 복사 : shutil.copy2()

shutil.copy2(src, dst, *, follow_symlinks=True)

함수는 shutil.copy()와 유사하지만, 추가적으로 원본 파일의 메타데이터(생성 및 수정 날짜)도 복사합니다.

디렉토리 복사/백업 : shutil.copytree()


shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False, dirs_exist_ok=False) 

이 함수는 디렉토리 전체를 복사하는 함수입니다.

주로 디렉토리를 백업하거나 이동할 때 사용됩니다.

주요 매개변수들에 대한 설명은 다음과 같습니다:

  • 매개변수
    • src: 복사할 디렉토리의 경로입니다.
    • dst: 대상 디렉토리의 경로입니다. 이 디렉토리에 src의 내용이 복사됩니다.
    • symlinks: True로 설정하면 심볼릭 링크도 복사합니다. 기본값은 False입니다.
    • ignore: 복사 중 무시할 파일이나 디렉토리의 목록입니다.
    • copy_function: 복사할 때 사용할 함수를 지정합니다. 기본값은 copy2로, 파일의 메타데이터를 복사합니다.
    • ignore_dangling_symlinks: True로 설정하면 끊긴 심볼릭 링크를 무시하고 계속 진행합니다. 기본값은 False입니다.
    • dirs_exist_ok: True로 설정하면 대상 디렉토리가 이미 존재해도 에러를 발생시키지 않고 덮어쓰기 없이 진행합니다. 기본값은 False입니다.

간단한 예제코드는 아래와 같습니다.

import shutil

src_dir = 'path/to/source/directory'
dst_dir = 'path/to/destination/directory'

shutil.copytree(src_dir, dst_dir)

디렉토리 삭제 : shutil.rmtree()

shutil.rmtree(path, ignore_errors=False, onerror=None, *, onexc=None, dir_fd=None)

주어진 경로의 디렉토리와 그 안의 모든 파일 및 서브디렉토리를 재귀적으로 삭제합니다.

  • 매개변수:
    • path: 삭제할 디렉토리의 경로입니다.
    • ignore_errors: True로 설정하면 오류를 무시하고 계속 진행합니다. 기본값은 False입니다.
    • onerror: 오류가 발생했을 때 호출할 함수를 지정합니다.
    • onexc: 예외가 발생했을 때 호출할 함수를 지정합니다.
    • dir_fd: 디렉토리를 삭제할 때 사용되는 파일 디스크립터입니다.

파일 및 디렉토리 이동 : shutil.move()

파일이나 디렉토리를 한 위치에서 다른 위치로 이동시킵니다.

  • 매개변수:
    • src: 이동할 파일 또는 디렉토리의 경로입니다.
    • dst: 이동할 대상의 경로입니다.
    • copy_function: 복사할 때 사용할 함수를 지정합니다. 기본값은 copy2로, 파일의 메타데이터를 복사합니다.

권한 변경 : shutil.chown()

shutil.chown(path, user=None, group=None)

파일이나 디렉토리의 소유자 및 그룹을 변경합니다.

  • 매개변수:
    • path: 소유자 및 그룹을 변경할 대상 파일이나 디렉토리의 경로입니다.
    • user: 변경할 소유자의 이름이나 UID입니다. 기본값은 None으로, 변경하지 않음을 의미합니다.
    • group: 변경할 그룹의 이름이나 GID입니다. 기본값은 None으로, 변경하지 않음을 의미합니다.

실행 가능한 경로 찾기 : shutil.which()

shutil.which(cmd, mode=os.F_OK | os.X_OK, path=None)

시스템의 PATH에 있는 실행 가능한 명령어의 경로를 반환합니다.

  • 매개변수:
    • cmd : 찾을 명령어의 이름입니다.
    • mode : 명령어가 존재하고 실행 가능한지 확인하는데 사용되는 모드입니다. 기본값은 os.F_OK | os.X_OK로, 파일이 존재하고 실행 가능한지를 의미합니다.
    • path : PATH를 대체할 경로를 지정합니다. 기본값은 None으로, 기본적으로는 시스템의 PATH를 사용합니다.

참고하면 좋은 글

https://docs.python.org/3/library/shutil.html

Leave a Comment

목차