gzip --- gzip 파일 지원

소스 코드: Lib/gzip.py


이 모듈은 GNU 프로그램 gzipgunzip처럼 파일을 압축하고 압축을 푸는 간단한 인터페이스를 제공합니다.

데이터 압축은 zlib 모듈에 의해 제공됩니다.

gzip 모듈은 open(), compress()decompress() 편리 함수뿐만 아니라 GzipFile 클래스도 제공합니다. GzipFile 클래스는 gzip-형식 파일을 읽고 쓰는데, 자동으로 데이터를 압축하거나 압축을 풀어서 일반적인 파일 객체처럼 보이게 합니다.

compresspack 프로그램에서 생성된 것과 같은, gzipgunzip 프로그램으로 압축을 풀 수 있는 추가 파일 형식은 이 모듈에서 지원하지 않습니다.

이 모듈은 다음 항목을 정의합니다:

gzip.open(filename, mode='rb', compresslevel=9, encoding=None, errors=None, newline=None)

바이너리나 텍스트 모드로 gzip으로 압축된 파일을 열고, 파일 객체를 반환합니다.

filename 인자는 실제 파일명(str이나 bytes 객체)이나, 읽거나 쓸 기존 파일 객체가 될 수 있습니다.

mode 인자는 바이너리 모드의 경우 'r', 'rb', 'a', 'ab', 'w', 'wb', 'x' 또는 'xb', 또는 텍스트 모드의 경우 'rt', 'at', 'wt' 또는 'xt' 중 하나일 수 있습니다. 기본값은 'rb'입니다.

compresslevel 인자는 GzipFile 생성자와 마찬가지로 0에서 9 사이의 정수입니다.

바이너리 모드의 경우, 이 함수는 GzipFile 생성자 GzipFile(filename, mode, compresslevel)와 동등합니다. 이 경우, encoding, errorsnewline 인자를 제공하면 안 됩니다.

텍스트 모드의 경우, GzipFile 객체가 만들어지고, 지정된 인코딩, 에러 처리 동작 및 줄 종료를 갖는 io.TextIOWrapper 인스턴스로 감싸집니다.

버전 3.3에서 변경: 파일 객체인 filename 지원, 텍스트 모드 지원 및 encoding, errorsnewline 인자가 추가되었습니다.

버전 3.4에서 변경: 'x', 'xb''xt' 모드에 대한 지원이 추가되었습니다.

버전 3.6에서 변경: 경로류 객체를 받아들입니다.

exception gzip.BadGzipFile

유효하지 않은 gzip 파일에 대한 예외. OSError를 상속합니다. EOFErrorzlib.error도 유효하지 않은 gzip 파일에 대해서 발생할 수 있습니다.

버전 3.8에 추가.

class gzip.GzipFile(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)

truncate() 메서드를 제외하고, 대부분 파일 객체 메서드를 흉내 내는 GzipFile 클래스의 생성자입니다. fileobjfilename 중 적어도 하나는 의미 있는 값을 부여해야 합니다.

새 클래스 인스턴스는 fileobj를 기반으로 하는데, 일반 파일, io.BytesIO 객체 또는 파일을 흉내 내는 다른 객체가 될 수 있습니다. 기본값은 None이며, 이 경우 파일 객체를 제공하기 위해 filename이 열립니다.

fileobjNone이 아닐 때, filename 인자는 gzip 파일 헤더에 포함되는 데만 사용되며, 이 헤더에는 압축되지 않은 파일의 원래 파일명이 포함될 수 있습니다. 보고 알 수 있다면, fileobj의 파일명을 기본값으로 사용합니다; 그렇지 않으면, 기본값은 빈 문자열이며, 이 경우 원래 파일명은 헤더에 포함되지 않습니다.

flowdas

"보고 알 수 있다"라는 뜻은 fileobjname 어트리뷰트를 조회한다는 뜻입니다. 이 어트리뷰트가 존재하고, 값이 str이나 bytes 면, "보고 알 수 있다"고 판단합니다.

mode 인자는 파일을 읽을지 쓸지에 따라 'r', 'rb', 'a', 'ab', 'w', 'wb', 'x' 또는 'xb' 중 하나일 수 있습니다. 보고 알 수 있다면, 기본값은 fileobj의 모드입니다; 그렇지 않으면, 기본값은 'rb'입니다.

flowdas

"보고 알 수 있다"라는 뜻은 fileobjmode 어트리뷰트를 조회한다는 뜻입니다.

파일이 항상 바이너리 모드로 열림에 유의하십시오. 텍스트 모드로 압축 파일을 열려면, open()을 사용하십시오 (또는 GzipFileio.TextIOWrapper로 감싸십시오).

flowdas

항상 바이너리 모드로 열린다는 것은, 가령 mode 인자가 'r'로 주어져도, 'rb'로 바꾼다는 뜻입니다. fileobj를 직접 제공할 때도, 역시 바이너리 모드로 열어서 제공해야함에 유의하십시오.

compresslevel 인자는 압축 수준을 제어하는 0에서 9까지의 정수입니다; 1은 가장 빠르고 압축률이 가장 낮으며, 9는 가장 느리고 압축률이 가장 높습니다. 0은 압축하지 않습니다. 기본값은 9입니다.

mtime 인자는 압축할 때 스트림의 마지막 수정 시간 필드에 기록되는 선택적 숫자 타임스탬프입니다. 압축 모드에서만 제공해야 합니다. 생략되거나 None이면, 현재 시각이 사용됩니다. 자세한 내용은 mtime 어트리뷰트를 참조하십시오.

GzipFile 객체의 close() 메서드를 호출해도 fileobj를 닫지 않습니다, 압축된 데이터 뒤에 뭔가 추가하기를 원할 수 있기 때문입니다. 또한, 이는 fileobj로 쓰기 위해 열린 io.BytesIO 객체를 전달하고, io.BytesIO 객체의 getvalue() 메서드를 사용하여 결과 메모리 버퍼를 얻을 수 있도록 합니다.

GzipFile은 이터레이션과 with 문을 포함하여 io.BufferedIOBase 인터페이스를 지원합니다. truncate() 메서드 만 구현되지 않습니다.

GzipFile은 다음 메서드와 어트리뷰트도 제공합니다:

peek(n)

파일 위치를 전진시키지 않고 압축되지 않은 n 바이트를 읽습니다. 호출을 만족시키기 위해 압축된 스트림에 대해 최대 한 번의 읽기가 수행됩니다. 반환된 바이트 수는 요청한 것보다 많거나 적을 수 있습니다.

참고

peek()를 호출할 때 GzipFile의 파일 위치가 변경되지는 않지만, 하부 파일 객체의 위치는 변경될 수 있습니다 (예를 들어, GzipFilefileobj 매개 변수로 생성된 경우).

버전 3.2에 추가.

mtime

압축을 풀 때, 가장 최근에 읽은 헤더의 마지막 수정 시간 필드의 값을 이 어트리뷰트에서 정수로 읽을 수 있습니다. 헤더를 읽기 전의 초깃값은 None입니다.

모든 gzip 압축 스트림에는 이 타임스탬프 필드가 있어야 합니다. gunzip과 같은 일부 프로그램은 타임스탬프를 사용합니다. 형식은 time.time()의 반환 값과 os.stat()에 의해 반환된 객체의 st_mtime 어트리뷰트와 같습니다.

버전 3.1에서 변경: mtime 생성자 인자와 mtime 어트리뷰트와 함께 with 문에 대한 지원이 추가되었습니다.

버전 3.2에서 변경: 제로 패딩(zero-padded)된 파일과 위치 변경할 수 없는(unseekable) 파일에 대한 지원이 추가되었습니다.

버전 3.3에서 변경: io.BufferedIOBase.read1() 메서드가 이제 구현됩니다.

버전 3.4에서 변경: 'x''xb' 모드에 대한 지원이 추가되었습니다.

버전 3.5에서 변경: 임의의 바이트열류 객체를 쓰는 지원이 추가되었습니다. 이제 read() 메서드는 None 인자를 받아들입니다.

버전 3.6에서 변경: 경로류 객체를 받아들입니다.

gzip.compress(data, compresslevel=9, *, mtime=None)

data를 압축하여, 압축된 데이터가 포함된 bytes 객체를 반환합니다. compresslevelmtime은 위의 GzipFile 생성자와 같은 의미입니다.

버전 3.2에 추가.

버전 3.8에서 변경: 재현성 있는 출력을 위한 mtime 매개 변수가 추가되었습니다.

gzip.decompress(data)

data의 압축을 풀어서, 압축되지 않은 데이터가 포함된 bytes 객체를 반환합니다.

버전 3.2에 추가.

사용 예

압축된 파일을 읽는 방법의 예:

import gzip
with gzip.open('/home/joe/file.txt.gz', 'rb') as f:
    file_content = f.read()

압축된 GZIP 파일을 만드는 방법의 예:

import gzip
content = b"Lots of content here"
with gzip.open('/home/joe/file.txt.gz', 'wb') as f:
    f.write(content)

기존 파일을 GZIP 압축하는 방법의 예:

import gzip
import shutil
with open('/home/joe/file.txt', 'rb') as f_in:
    with gzip.open('/home/joe/file.txt.gz', 'wb') as f_out:
        shutil.copyfileobj(f_in, f_out)

바이너리 문자열을 GZIP 압축하는 방법의 예:

import gzip
s_in = b"Lots of content here"
s_out = gzip.compress(s_in)

더 보기

모듈 zlib

gzip 파일 형식을 지원하는 데 필요한 기본 데이터 압축 모듈.

명령 줄 인터페이스

gzip 모듈은 파일을 압축하거나 압축 해제하는 간단한 명령 줄 인터페이스를 제공합니다.

일단 실행되면 gzip 모듈은 입력 파일을 유지합니다.

버전 3.8에서 변경: 새로운 명령 중 인터페이스를 사용법과 함께 추가합니다. 기본적으로, CLI를 실행할 때, 기본 압축 수준은 6입니다.

명령 줄 옵션

file

file이 지정되지 않으면, sys.stdin에서 읽습니다.

--fast

가장 빠른 압축 방법(압축을 덜 함)을 나타냅니다.

--best

가장 느린 압축 방법(최상의 압축)을 나타냅니다.

-d, --decompress

주어진 파일의 압축을 풉니다.

-h, --help

도움말 메시지를 표시합니다.