파이썬 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_symlinks
가 True
로 설정되어 있으면 심볼릭 링크를 따라가서 그 링크가 가리키는 파일의 데이터를 복사합니다.
파일 권한 복사 : 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_symlinks
가True
로 설정되면, 심볼릭 링크가 가리키는 파일의 상태를 복사하고,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를 사용합니다.