shutil — 고수준 파일 연산

shutil — 고수준 파일 연산

shutil 모듈은 파일과 파일 모음에 대한 여러 고수준 연산을 제공합니다. 특히 파일 복사와 제거를 위한 함수를 제공합니다. 개별 파일에 대해서는 os 모듈 참고하세요.

출처: Python documentation

본문

디렉터리 및 파일 연산

  • shutil.copyfileobj(fsrc, fdst, length=16*1024) — 파일류 객체 fsrc의 내용을 파일류 객체 fdst에 복사합니다. 정수 length가 주어지면 청크 크기로 사용됩니다. fsrcread() 메서드가 0을 반환할 때까지 복사합니다. 세부 사항: fdstfsrc에서 복사할 전체 내용을 보관할 충분한 공간이 있어야 하며 fsrc처럼 위치를 조작할 수 있어야 합니다. fsrc는 읽기 가능하게, fdst는 쓰기 가능하게 열려 있어야 합니다.
  • *shutil.copyfile(src, dst, , follow_symlinks=True)src로 명명된 파일의 내용(메타데이터 없음)을 dst로 명명된 파일에 복사하고 dst를 반환합니다. srcdst는 경로 이름을 나타내는 문자열 또는 path-like 객체여야 합니다. dst가 디렉터리면 자동으로 디렉터리로 처리되고 src와 같은 기본 이름(기본 파일 이름)의 파일이 그 디렉터리에 생성됩니다. 다른 경로에 대한 심볼릭 링크인 파일은 링크 자체가 아니라 대상 파일을 복사합니다. follow_symlinksFalse이면 새 심볼릭 링크(dst)가 src를 가리키도록 만들어집니다. 두 경우 모두 응답 플랫폼에서 FileExistsError를 발생시킬 수 있습니다.
    • 복사 대상 네트워크 파일의 일부 구현에서 copyfile()copy()가 실패할 수 있습니다. copy2()보다는 네트워크 파일에서 더 잘 작동합니다. 로컬 파일의 경우 성능 차이가 미미합니다.
  • *shutil.copymode(src, dst, , follow_symlinks=True) — 권한 비트를 src에서 dst로 복사합니다. 파일 내용, 소유자 및 그룹은 영향을 받지습니다. follow_symlinksFalse이고 srcdst가 모두 심볼릭 링크이면 copymode()dst 링크 자체의 모드를 변경하려 시도합니다(플랫폼이 허용하는 경우).
  • *shutil.copystat(src, dst, , follow_symlinks=True) — 권한 비트, 접근 시간, 수정 시간 및 플래그를 src에서 dst로 복사합니다. follow_symlinksFalse이고 srcdst가 모두 심볼릭 링크이면 copystat()는 링크 자체에 작동합니다.
  • *shutil.copy(src, dst, , follow_symlinks=True) — 파일 src를 파일 또는 디렉터리 dst로 복사하고 dst를 반환합니다. srcdst가 둘 다 파일이어야 하며, follow_symlinks=False이면 dst는 심볼릭 링크여야 합니다. copymode()을 사용하여 권한을 복사하고 대신 copyfile()을 사용하여 내용을 복사합니다. 권한(메타데이터)은 copy2()를 사용하여 src의 권한과 정확히 일치하지는 않지만 일반적으로 사용하도록 설계된 함수입니다.
  • *shutil.copy2(src, dst, , follow_symlinks=True)copy()와 동일하지만 복사 ·st에 파일의 모든 메타데이터가 포함된다는 점이 다릅니다. 파일 내용 및 메타데이터가 있는 경우 copystat()의 동작과 같이 다른 플랫폼에 지정되지 않은 메타데이터는 제거됩니다. follow_symlinks=False이면 파일이 심볼릭 링크가 아닌 것으로 처리됩니다.
  • *shutil.ignore_patterns(patterns)shutil.copytree()ignore 인자로 전달할 수 있는 함수를 반환합니다. patterns는 쉘 스타일 glob 패턴으로, 디렉터리와 파일을 제외하기 위해 사용됩니다. 제외된 항목을 나열하는 함수를 반환합니다.
  • shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False, dirs_exist_ok=False)src로 명명된 디렉터리의 전체 디렉터리 트리를 재귀적으로 복사하여 dst에 반환합니다. dst는 이미 존재하는 디렉터리의 이름을 가질 수 있으며, 이 경우 src의 트리 안에 복사됩니다.
    • symlinks=False이면 트리의 심볼릭 링크가 참조의 임시 파일로 재생성됩니다. symlinks=True이면 심볼릭 링크가 원래 대상에 대한 심볼릭 링크로 복사됩니다. symlinks가 참일 때 srcdst가 심볼릭 링크라도 대상이 아닌 링크가 복사됩니다.
    • ignore 인자를 제공하면 예외가 발생한 copy_function 호출로 남은 파일이 멈춥니다. ignore가 호출되어 현재 디렉터리의 항목 목록을 인자로 전달받습니다. 이 함수는 제외할 항목 이름 목록을 반환해야 합니다. ignore_patterns()가 이러한 함수를 만드는 편리한 방법입니다.
    • copy_function은 파일을 복사하는 데 사용되는 호출 가능 인자입니다. 각 파일에 대해 하나씩 호출됩니다. 기본값은 copy2()입니다. copy_function(src, dst)로 호출됩니다. src의 원본 심볼릭 링크의 대상이 존재하고 ignore_dangling_symlinks가 거짓이면 copy_functionsrc가 링크의 대상으로 설정되고 따라가게 됩니다. os.path.islink(src)True를 반환하고 링크의 대상이 존재하지 않으면 Error가 발생합니다.
    • dirs_exist_ok=False(기본값)이면 dst가 존재하면 FileExistsError가 발생합니다.
  • *shutil.rmtree(path, ignore_errors=False, onerror=None, , onexc=None, dir_fd=None) — 전체 디렉터리 트리를 삭제합니다. path는 디렉터리를 가리켜야 하지만 다른 종류의 심볼릭 링크도 허용됩니다. ignore_errors가 참이면 파일을 제거하는 동안 발생한 오류는 무시됩니다. ignore_errors가 거짓이거나 호출이 실패하면 onexc가 오류를 처리하기 위해 호출됩니다.

versionadded: 3.12에서 onexc 매개변수가 추가되었습니다.

versionchanged: 3.12에서 onerror 매개변수는 더 이상 사용되지 않습니다.

  • shutil.move(src, dst, copy_function=copy2) — 파일 또는 디렉터리(src)를 재귀적으로 이동하고 대상을 반환합니다. 대상이 기존 디렉터리이면 src는 이 디렉터리 안으로 이동됩니다. 대상이 이미 다른 이름으로 존재하는 경우 대체됩니다. new_name이 지정되지 않으면 src의 기본 이름이 사용됩니다. target은 파일 이름(즉, move('a.py', 'b.py')) 또는 디렉터리 이름일 수도 있습니다. src가 디렉터리이면 이동합니다. 같은 파일시스템에 있으면 os.rename()을 사용하고, 그렇지 않으면 copy_functionrmtree()을 사용합니다. 이동하려는 대상이 이미 존재하고 os.rename()을 사용해야 하는 경우 os.rename()은 일치하지 않는 대상이 CopyError를 발생시킬 수 있습니다.
  • shutil.disk_usage(path)path에 대한 디스크 사용 통계를 (total, used, free)로 구성된 named tuple로 반환합니다. total, used, free는 총 디스크 공간, 사용된 공간, 사용 가능한 공간의 양을 나타냅니다.
  • shutil.chown(path, user=None, group=None)path의 소유자를 지정된 사용자와 그룹으로 변경합니다. usergroup은 사용자 ID(user ID) 또는 시스템 사용자 데이터베이스에 있는 사용자 이름 문자열일 수 있습니다. usergroup 중 하나가 생략되면 해당 항목은 변경되지 않습니다. usergroup 중 하나 이상을 지정해야 합니다.
  • shutil.which(cmd, mode=os.F_OK | os.X_OK, path=None)PATH 환경 변수의 디렉터리에서 실행 가능하게 될 수 있는 파일을 검색하고 해당 경로를 반환합니다. cmd는 실행 파일 이름입니다. 반환 값은 실제로 존재하고 지정된 조건을 충족하는 파일의 경로입니다. path가 지정되면 검색할 경로입니다. mode는 확인할 파일 권한입니다. cmdos.sep 문자를 포함하면 path는 무시되고 절대 경로가 반환되지만 파일이 존재하고 실행 가능해야 합니다.
  • shutil.which(cmd, mode=os.F_OK | os.X_OK, path=None) — 위와 동일한 검색을 수행합니다.

아카이브 연산

  • shutil.make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0, dry_run=0, owner=None, group=None, logger=None) — 아카이브 파일을 만들고 그 이름을 반환합니다. base_name은 만들 아카이브 파일의 이름(확장자 제외)입니다. format은 아카이브 형식입니다. root_dir은 소스 파일이 있는 경로입니다. base_dir은 이동할 파일의 이름입니다. ownergroup은 아카이브에 포함된 파일의 소유자와 그룹입니다. logger는 진행 정보를 기록하는데 사용되는 로거입니다. 반환 값은 만들어진 아카이브 파일의 전체 경로입니다.
  • shutil.get_archive_formats() — 지원되는 아카이브 형식 목록을 반환합니다. 각 항목은 (name, description)입니다.
  • shutil.register_archive_format(name, function, extra_args=None, description='') — 아카이브 형식 name을 등록합니다. function은 아카이브를 만드는 데 사용할 함수입니다. extra_args는 함수에 전달할 추가 키워드 인자입니다. description은 형식의 설명입니다.
  • shutil.unregister_archive_format(name) — 아카이브 형식 name의 등록을 해제합니다.
  • shutil.unpack_archive(filename, extract_dir=None, format=None) — 아카이브를 압축 해제합니다. filename은 아카이브 파일의 경로입니다. extract_dir은 파일이 추출될 대상 디렉터리의 이름입니다. format은 아카이브 형식입니다. formatNone이면 파일 확장자에서 자동 감지됩니다.
  • shutil.get_unpack_formats() — 지원되는 압축 해제 형식을 반환합니다. get_archive_formats()와 유사합니다.
  • shutil.register_unpack_format(name, extensions, function, extra_args=None, description='') — 압축 해제 형식 name을 등록합니다. extensions는 이 형식이 지원하는 파일 확장자 목록입니다. function은 압축 해제에 사용할 함수로 (filename, extract_dir)로 호출됩니다.
  • shutil.unregister_unpack_format(name) — 압축 해제 형식 name의 등록을 해제합니다.

archiving example

make_archive()를 사용하여 아카이브를 만드는 예:

import shutil
shutil.make_archive('out', 'zip', 'source_dir')

더 알아보기 (Learn more)