tarfile — tar 아카이브 읽기 및 쓰기

tarfile — tar 아카이브 읽기 및 쓰기

tarfile 모듈은 gzip, bz2, lzma 압축을 지원하는 tar 아카이브를 읽고 쓸 수 있게 합니다. zipfile 모듈과 함께 사용하여 압축 아카이브를 처리할 수 있습니다.

출처: Python documentation

본문

tar 파일은 "테이프 아카이브(tape archive)"의 약자이며 파일과 디렉터리를 하나의 파일로 수집하는 데 사용됩니다. tarfile 모듈은 tar 아카이브를 생성하고 읽는 기능을 제공합니다.

모듈 인터페이스

  • **tarfile.open(name=None, mode='r', fileobj=None, bufsize=10240, kwargs) — tar 아카이브를 엽니다. name은 아카이브 파일 이름입니다. mode는 아카이브를 여는 모드입니다. 'r'은 읽기 전용, 'w'는 쓰기 전용, 'a'는 추가입니다. 'r:'는 압축 없는 tar를 읽습니다. 압축을 지원하는 모드('r:gz', 'r:bz2', 'r:xz')도 있습니다. fileobj를 제공하면 그 객체를 사용합니다.
  • tarfile.is_tarfile(name)name이 tar 아카이브 파일이면 True, 아니면 False를 반환합니다.
  • tarfile.TarFile — tar 아카이브를 나타내는 클래스입니다. 이 클래스는 open()으로 만든 tar 파일 객체입니다.
  • tarfile.TarInfo(name='') — tar 아카이브의 파일 항목을 나타내는 클래스. getmember()getmembers()로 반환되며 여러 속성(name, size, mtime, mode, type 등)을 가집니다.
  • tarfile.ExFileObject — tar 아카이브에서 파일을 읽기 위해 사용되는 파일류 객체입니다.

TarFile 객체 사용

TarFile 객체는 다음과 같은 주요 메서드를 가집니다.

  • *add(name, arcname=None, recursive=True, , filter=None) — 파일 name을 아카이브에 추가합니다. arcname은 아카이브 안에서의 이름입니다. recursive=True이면 디렉터리를 재귀적으로 추가합니다. filter는 필터링 함수입니다.
  • *extract(member, path='', set_attrs=True, , numeric_owner=False, filter=None) — 아카이브에서 member를 현재 작업 디렉터리 또는 path로 추출합니다. set_attrs=True이면 파일 속성을 설정합니다. filter는 보안 필터입니다.
  • *extractall(path='.', members=None, , numeric_owner=False, filter=None) — 아카이브의 모든 멤버를 path로 추출합니다.
  • getmembers() — 아카이브의 모든 멤버를 TarInfo 객체 목록으로 반환합니다.
  • getmember(name) — 이름이 name인 멤버의 TarInfo 객체를 반환합니다.
  • list(verbose=True) — 아카이브 내용을 출력합니다.
  • close() — tar 파일을 닫습니다.
  • getnames() — 아카이브의 모든 멤버 이름 목록을 반환합니다.

tar 아카이브 읽기

tarfile.open('example.tar')로 열고 for member in tar.getmembers() 또는 tar.extractall()을 사용하여 아카이브를 읽습니다.

import tarfile

with tarfile.open('example.tar', 'r') as tar:
    tar.extractall(path='out')

tar 아카이브 쓰기

tarfile.open('example.tar', 'w')로 열고 add()로 파일을 추가합니다.

import tarfile

with tarfile.open('example.tar', 'w') as tar:
    tar.add('file1.py')
    tar.add('file2.py')

압축된 tar를 쓰려면 'w:gz', 'w:bz2', 'w:xz' 모드를 사용합니다.

압축 지원

tarfile 모듈은 다음 압축 형식을 지원합니다.

  • gzip'r:gz' / 'w:gz' 모드.
  • bzip2'r:bz2' / 'w:bz2' 모드.
  • lzma'r:xz' / 'w:xz' 모드.

압축은 파일 확장자에서 자동 감지됩니다. 'r' 모드는 압축 자동 감지와 함께 tar 읽기에 사용됩니다.

보안 고려 사항

extract()extractall()을 사용할 때는 tar 아카이브에 악성 파일 경로가 포함될 수 있으므로 주의해야 합니다. filter 매개변수를 사용하여 추출되는 파일을 검증할 수 있습니다. 또한 경로 탐색 공격을 방지하기 위해 path 검사가 필요합니다.

더 알아보기 (Learn more)