tarfile — tar 아카이브 읽기 및 쓰기
tarfile — tar 아카이브 읽기 및 쓰기
tarfile 모듈은 gzip, bz2, lzma 압축을 지원하는 tar 아카이브를 읽고 쓸 수 있게 합니다. zipfile 모듈과 함께 사용하여 압축 아카이브를 처리할 수 있습니다.
본문
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 검사가 필요합니다.