lzma — LZMA 알고리즘을 사용한 압축

lzma — LZMA 알고리즘을 사용한 압축

lzma 모듈은 LZMA 압축 알고리즘을 사용해 데이터를 압축·해제하는 클래스와 편의 함수를 제공해요. xz 유틸리티가 사용하는 .xz 및 레거시 .lzma 파일 형식을 지원하는 파일 인터페이스와 원시 압축 스트림도 포함돼요.

이 모듈이 제공하는 인터페이스는 bz2 모듈의 것과 매우 유사해요. LZMAFilebz2.BZ2File은 스레드 안전하지 않으므로, 여러 스레드에서 단일 LZMAFile 인스턴스를 사용해야 한다면 잠금으로 보호해야 해요.

버전 3.3에서 추가됨.

출처: Python documentation

본문

예외

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 압축 파일을 바이너리 모드로 열어요. 이미 열린 파일 객체를 감싸거나 명명된 파일에서 직접 동작할 수 있어요. 읽기 위해 열 때 입력 파일은 여러 개별 압축 스트림의 연결일 수 있으며, 이들은 단일 논리적 스트림으로 투명하게 디코딩돼요. LZMAFiledetach()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_NONECHECK_CRC32는 항상 지원돼요.

사용자 지정 필터 체인 지정

필터 체인 지정자는 딕셔너리의 시퀀스이며, 각 딕셔너리는 단일 필터의 ID와 옵션을 포함해요. 각 딕셔너리는 "id" 키를 포함해야 하고 필터별 옵션을 지정하는 추가 키를 포함할 수 있어요. 유효한 필터 ID는 다음과 같아요:

  • 압축 필터: FILTER_LZMA1(FORMAT_ALONE용), FILTER_LZMA2(FORMAT_XZFORMAT_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)

더 알아보기 (Learn more)