lzma — LZMA 알고리즘을 사용한 압축
lzma — LZMA 알고리즘을 사용한 압축
lzma 모듈은 LZMA 압축 알고리즘을 사용해 데이터를 압축·해제하는 클래스와 편의 함수를 제공해요. xz 유틸리티가 사용하는 .xz 및 레거시 .lzma 파일 형식을 지원하는 파일 인터페이스와 원시 압축 스트림도 포함돼요.
이 모듈이 제공하는 인터페이스는 bz2 모듈의 것과 매우 유사해요. LZMAFile과 bz2.BZ2File은 스레드 안전하지 않으므로, 여러 스레드에서 단일 LZMAFile 인스턴스를 사용해야 한다면 잠금으로 보호해야 해요.
버전 3.3에서 추가됨.
본문
예외
exception lzma.LZMAError — 압축·해제 중이거나, 압축기/해제기 상태를 초기화하는 동안 오류가 발생하면 발생하는 예외예요.
압축 파일 읽기·쓰기
lzma.open(filename, mode='rb', *, format=None, check=-1, preset=None, filters=None, encoding=None, errors=None, newline=None) — LZMA 압축 파일을 바이너리 또는 텍스트 모드로 열어 파일 객체를 반환해요. filename은 실제 파일 이름(str, bytes 또는 path-like 객체)이거나 읽거나 쓸 기존 파일 객체일 수 있어요. mode는 바이너리 모드의 경우 "r", "rb", "w", "wb", "x", "xb", "a", "ab" 중 하나이고, 텍스트 모드의 경우 "rt", "wt", "xt", "at" 중 하나예요. 기본값은 "rb"예요.
class lzma.LZMAFile(filename=None, mode='r', *, format=None, check=-1, preset=None, filters=None) — LZMA 압축 파일을 바이너리 모드로 열어요. 이미 열린 파일 객체를 감싸거나 명명된 파일에서 직접 동작할 수 있어요. 읽기 위해 열 때 입력 파일은 여러 개별 압축 스트림의 연결일 수 있으며, 이들은 단일 논리적 스트림으로 투명하게 디코딩돼요. LZMAFile은 detach()와 truncate()를 제외한 io.BufferedIOBase가 지정한 모든 멤버를 지원하며, 반복과 with 문도 지원해요.
peek(size=-1) — 파일 위치를 진행하지 않고 버퍼된 데이터를 반환해요. mode — 읽기용 'rb', 쓰기용 'wb'. name — lzma 파일 이름.
메모리 데이터 압축·해제
class lzma.LZMACompressor(format=FORMAT_XZ, check=-1, preset=None, filters=None) — 데이터를 증분식으로 압축하는 데 사용할 수 있는 압축기 객체를 만들어요. format 인자는 사용할 컨테이너 형식을 지정하며, 가능한 값은 FORMAT_XZ(기본값), FORMAT_ALONE, FORMAT_RAW예요. check 인자는 압축 데이터에 포함할 무결성 검사 유형을 지정하며, CHECK_NONE, CHECK_CRC32, CHECK_CRC64(기본값), CHECK_SHA256이 가능해요. preset 인자는 0~9(포함) 사이의 정수여야 하며, PRESET_EXTREME 상수와 OR할 수 있어요. 더 높은 프리셋은 더 작은 출력을 만들지만 압축 과정을 느리게 해요.
compress(data) — data(bytes 객체)를 압축해 입력의 적어도 일부에 대한 압축 데이터를 포함하는 bytes 객체를 반환해요. flush() — 압축 과정을 마치고 압축기 내부 버퍼에 저장된 데이터를 포함하는 bytes 객체를 반환해요.
class lzma.LZMADecompressor(format=FORMAT_AUTO, memlimit=None, filters=None) — 데이터를 증분식으로 해제하는 데 사용할 수 있는 해제기 객체를 만들어요. 기본 FORMAT_AUTO는 .xz와 .lzma 파일을 모두 해제할 수 있어요. memlimit 인자는 해제기가 사용할 수 있는 메모리 양(바이트)의 한도를 지정해요. 이 클래스는 decompress()와 LZMAFile과 달리 여러 압축 스트림을 포함하는 입력을 투명하게 처리하지 않아요.
decompress(data, max_length=-1) — data(bytes 유사 객체)를 해제해 압축 해제된 데이터를 bytes로 반환해요. 속성: check(용량 확인 ID), eof, unused_data, needs_input.
lzma.compress(data, format=FORMAT_XZ, check=-1, preset=None, filters=None) — data(bytes 객체)를 압축해 압축된 데이터를 bytes 객체로 반환해요. lzma.decompress(data, format=FORMAT_AUTO, memlimit=None, filters=None) — data(bytes 객체)를 해제해 압축 해제된 데이터를 bytes 객체로 반환해요.
기타
lzma.is_check_supported(check) — 주어진 무결성 검사가 이 시스템에서 지원되면 True를 반환해요. CHECK_NONE과 CHECK_CRC32는 항상 지원돼요.
사용자 지정 필터 체인 지정
필터 체인 지정자는 딕셔너리의 시퀀스이며, 각 딕셔너리는 단일 필터의 ID와 옵션을 포함해요. 각 딕셔너리는 "id" 키를 포함해야 하고 필터별 옵션을 지정하는 추가 키를 포함할 수 있어요. 유효한 필터 ID는 다음과 같아요:
- 압축 필터:
FILTER_LZMA1(FORMAT_ALONE용),FILTER_LZMA2(FORMAT_XZ및FORMAT_RAW용). - 델타 필터:
FILTER_DELTA. - BCJ 필터:
FILTER_X86,FILTER_IA64,FILTER_ARM,FILTER_ARMTHUMB,FILTER_POWERPC,FILTER_SPARC.
필터 체인은 최대 4개 필터로 구성될 수 있고 비어 있을 수 없어요. 체인의 마지막 필터는 압축 필터여야 해요.
상수
- 컨테이너 형식:
FORMAT_XZ,FORMAT_ALONE,FORMAT_RAW,FORMAT_AUTO. - 무결성 검사:
CHECK_NONE,CHECK_CRC32,CHECK_CRC64,CHECK_SHA256,CHECK_UNKNOWN,CHECK_ID_MAX. - 압축 프리셋:
PRESET_DEFAULT(레벨6과 동일),PRESET_EXTREME. - 필터 ID와 옵션:
FILTER_LZMA1,FILTER_LZMA2,FILTER_DELTA,MODE_FAST,MODE_NORMAL,MF_HC3,MF_HC4,MF_BT2,MF_BT3,MF_BT4.
예시
압축 파일 읽기:
import lzma
with lzma.open("file.xz") as f:
file_content = f.read()
압축 파일 만들기:
import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
f.write(data)
메모리 데이터 압축:
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)