gzip — gzip 파일 지원¶
소스 코드: Lib/gzip.py
이 모듈은 GNU 프로그램 gzip과 gunzip처럼 파일을 압축하고 압축을 푸는 간단한 인터페이스를 제공합니다.
This is an optional module. If it is missing from your copy of CPython, look for documentation from your distributor (that is, whoever provided Python to you). If you are the distributor, see 선택적 모듈 요구사항.
데이터 압축은 zlib 모듈에 의해 제공됩니다.
gzip 모듈은 open(), compress() 및 decompress() 편의 함수뿐만 아니라 GzipFile 클래스도 제공합니다. GzipFile 클래스는 gzip-형식 파일을 읽고 쓰는데, 자동으로 데이터를 압축하거나 압축을 풀어서 일반적인 :term:`파일 객체 <file object>`처럼 보이게 합니다.
compress와 pack 프로그램에서 생성된 것과 같은, gzip과 gunzip 프로그램으로 압축을 풀 수 있는 추가 파일 형식은 이 모듈에서 지원하지 않습니다.
이 모듈은 다음 항목을 정의합니다:
- gzip.open(filename, mode='rb', compresslevel=6, encoding=None, errors=None, newline=None, *, mtime=None)¶
바이너리나 텍스트 모드로 gzip으로 압축된 파일을 열고, 파일 객체를 반환합니다.
filename 인자는 실제 파일명(
str이나bytes객체)이나, 읽거나 쓸 기존 파일 객체가 될 수 있습니다.mode 인자는 바이너리 모드의 경우
'r','rb','a','ab','w','wb','x'또는'xb', 또는 텍스트 모드의 경우'rt','at','wt'또는'xt'중 하나일 수 있습니다. 기본값은'rb'입니다.compresslevel 인자는
GzipFile생성자와 마찬가지로 0에서 9 사이의 정수입니다.키워드 전용 인수 mtime 는 유닉스 타임스탬프를 나타냅니다.
바이너리 모드의 경우, 이 함수는
GzipFile생성자GzipFile(filename, mode, compresslevel)와 동등합니다. 이 경우, encoding, errors 및 newline 인자는 제공해서는 안 됩니다.텍스트 모드의 경우,
GzipFile객체가 만들어지고, 지정된 인코딩, 에러 처리 동작 및 줄 종료를 갖는io.TextIOWrapper인스턴스로 감싸집니다.버전 3.3에서 변경: 파일 객체인 filename 지원, 텍스트 모드 지원 및 encoding, errors 및 newline 인자가 추가되었습니다.
버전 3.4에서 변경:
'x','xb'및'xt'모드에 대한 지원이 추가되었습니다.버전 3.6에서 변경: 경로류 객체를 받아들입니다.
버전 3.15에서 변경: 기본 압축 수준이 9에서 6으로 낮춰졌습니다. 이 수준은 대부분의 압축 도구에서 사용되는 기본 수준이며 속도와 성능 간에 더 나은 균형을 제공합니다.
버전 3.16.0a0 (unreleased)에서 변경: 클래스
GzipFile의 생성자에 전달되는 키워드 전용 인수 mtime 을 추가했습니다.
- exception gzip.BadGzipFile¶
유효하지 않은 gzip 파일에 대한 예외.
OSError를 상속합니다.EOFError와zlib.error도 유효하지 않은 gzip 파일에 대해서 발생할 수 있습니다.Added in version 3.8.
- class gzip.GzipFile(filename=None, mode=None, compresslevel=6, fileobj=None, mtime=None)¶
truncate()메서드를 제외하고, 대부분 파일 객체 메서드를 흉내 내는GzipFile클래스의 생성자입니다. fileobj와 filename 중 적어도 하나는 의미 있는 값을 부여해야 합니다.새 클래스 인스턴스는 fileobj를 기반으로 하는데, 일반 파일,
io.BytesIO객체 또는 파일을 흉내 내는 다른 객체가 될 수 있습니다. 기본값은None이며, 이 경우 파일 객체를 제공하기 위해 filename이 열립니다.fileobj가
None이 아닐 때, filename 인자는 gzip 파일 헤더에 포함되는 데만 사용되며, 이 헤더에는 압축되지 않은 파일의 원래 파일명이 포함될 수 있습니다. 보고 알 수 있다면, fileobj의 파일명을 기본값으로 사용합니다; 그렇지 않으면, 기본값은 빈 문자열이며, 이 경우 원래 파일명은 헤더에 포함되지 않습니다.mode 인자는 파일을 읽을지 쓸지에 따라
'r','rb','a','ab','w','wb','x'또는'xb'중 하나일 수 있습니다. 보고 알 수 있다면, 기본값은 fileobj의 모드입니다; 그렇지 않으면, 기본값은'rb'입니다. 향후 파이썬 릴리스에서는 fileobj의 모드가 사용되지 않습니다. 항상 쓰기를 위해서는 mode를 지정하는 것이 좋습니다.파일이 항상 바이너리 모드로 열림에 유의하십시오. 텍스트 모드로 압축 파일을 열려면,
open()을 사용하십시오 (또는GzipFile을io.TextIOWrapper로 감싸십시오).compresslevel 인자는 압축 수준을 제어하는
0에서9까지의 정수입니다;1은 가장 빠르고 압축률이 가장 낮으며,9는 가장 느리고 압축률이 가장 높습니다.0은 압축하지 않습니다. 기본값은9입니다.선택적 mtime 인수는 gzip이 요청하는 타임스탬프입니다. 시간은 유닉스 형식, 즉 1970년 1월 1일 00:00:00 UTC 이후의 초입니다. 생성 시간에 의존하지 않는 압축 스트림을 생성하려면 mtime 을
0으로 설정하십시오. mtime 이 생략되거나None인 경우 현재 시간이 사용되지만, 현재 시간이 00:00:00 UTC, 1970년 1월 1일부터 06:28:15 UTC, 2106년 2월 7일 범위를 벗어나거나, 명시적으로 전달된 mtime 인수가0부터2**32-1범위 밖에 있는 경우, 대신 값0이 사용됩니다.압축을 풀 때 설정되는
mtime속성은 아래를 참조하십시오.GzipFile객체의close()메서드를 호출해도 fileobj를 닫지 않습니다, 압축된 데이터 뒤에 뭔가 추가하기를 원할 수 있기 때문입니다. 또한, 이는 fileobj로 쓰기 위해 열린io.BytesIO객체를 전달하고,io.BytesIO객체의getvalue()메서드를 사용하여 결과 메모리 버퍼를 얻을 수 있도록 합니다.GzipFile은 이터레이션과with문을 포함하여io.BufferedIOBase인터페이스를 지원합니다.truncate()메서드 만 구현되지 않습니다.GzipFile은 다음 메서드와 어트리뷰트도 제공합니다:- peek(n)¶
파일 위치를 전진시키지 않고 압축되지 않은 n 바이트를 읽습니다. 반환된 바이트 수는 요청한 것보다 많거나 적을 수 있습니다.
참고
peek()를 호출할 때GzipFile의 파일 위치가 변경되지는 않지만, 하부 파일 객체의 위치는 변경될 수 있습니다 (예를 들어,GzipFile이 fileobj 매개 변수로 생성된 경우).Added in version 3.2.
- mode¶
읽기 시
'rb', 그리고 쓰기 시'wb'를 사용합니다.버전 3.13에서 변경: 이전 버전에서는 정수
1또는2였습니다.
- mtime¶
압축을 풀 때, 이 어트리뷰트는 가장 최근에 읽은 헤더의 마지막 타임스탬프로 설정됩니다. 유닉스 에포크 (1970-01-01 00:00:00 UTC) 이후의 시간(초)를 나타내는 정수입니다. 헤더를 읽기 전의 초깃값은
None입니다.
- name¶
디스크에 있는 gzip 파일의 경로입니다.
str또는bytes형식입니다. 원본 입력 경로에 대한 :func:`os.fspath`의 출력과 동일하며, 다른 정규화, 해석 또는 확장 과정은 없습니다.
버전 3.2에서 변경: 제로 패딩(zero-padded)된 파일과 위치 변경할 수 없는(unseekable) 파일에 대한 지원이 추가되었습니다.
버전 3.3에서 변경:
io.BufferedIOBase.read1()메서드가 이제 구현됩니다.버전 3.4에서 변경:
'x'및'xb'모드에 대한 지원이 추가되었습니다.버전 3.6에서 변경: 경로류 객체를 받아들입니다.
버전 3.9부터 폐지됨: mode 인자를 지정하지 않고 쓰기 위해
GzipFile을 여는 것은 폐지되었습니다.버전 3.12에서 변경:
filename속성을 제거하고 대신name속성을 사용하세요.버전 3.15에서 변경: 기본 압축 수준이 9에서 6으로 낮춰졌습니다. 이 수준은 대부분의 압축 도구에서 사용되는 기본 수준이며 속도와 성능 간에 더 나은 균형을 제공합니다.
- gzip.compress(data, compresslevel=6, *, mtime=0)¶
data 를 압축하여 압축된 데이터를 포함하는
bytes객체를 반환합니다. compresslevel 및 mtime 은 위GzipFile생성자와 동일한 의미를 가지지만, 재현 가능한 출력을 위해 mtime 은 기본값이 0입니다.Added in version 3.2.
버전 3.8에서 변경: 재현성 있는 출력을 위한 mtime 매개 변수가 추가되었습니다.
버전 3.11에서 변경: 스트리밍 형태로 데이터 전체를 압축하는 대신 한 번에 압축하여 속도를 개선합니다. mtime 이
0으로 설정된 호출은 더 좋은 속도를 위해zlib.compress()로 위임됩니다. 이 경우 출력에는 기본 zlib 구현에서 제공하는 255 “unknown” 이외의 gzip 헤더 OS 바이트 값이 포함될 수 있습니다.버전 3.13에서 변경: 이 함수는 3.10 버전 이전과 마찬가지로 사용될 때 gzip 헤더 OS 바이트가 255로 설정됨이 보장됩니다.
버전 3.14에서 변경: mtime 매개 변수의 기본값이 재현 가능한 출력을 위해 0으로 변경되었습니다. 현재 시간을 사용했던 이전 동작을 원한다면, mtime 에
None을 전달하세요.버전 3.15에서 변경: 기본 압축 수준이 9에서 6으로 낮춰졌습니다. 이 수준은 대부분의 압축 도구에서 사용되는 기본 수준이며 속도와 성능 간에 더 나은 균형을 제공합니다.
- gzip.decompress(data)¶
data 를 압축 해제하고 압축 해제된 데이터를 포함하는
bytes객체를 반환합니다. 이 함수는 다중 멤버 gzip 데이터(여러 gzip 블록 연결)를 압축 해제할 수 있습니다. 데이터가 하나의 멤버만 포함하는 것이 확실하다면, wbits 를 31로 설정한zlib.decompress()함수가 더 빠릅니다.Added in version 3.2.
버전 3.11에서 변경: 스트리밍 형태로 디컴프레스하는 대신 메모리에서 한 번에 멤버를 압축 해제하여 속도를 개선합니다.
사용 예¶
압축된 파일을 읽는 방법의 예:
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(압축/해제)이 병목 현상을 일으키는 경우, python-isal 패키지는 대체로 호환되는 API로 압축(해제)을 가속화합니다.
명령줄 인터페이스¶
gzip 모듈은 파일을 압축하거나 압축 해제하는 간단한 명령줄 인터페이스를 제공합니다.
일단 실행되면 gzip 모듈은 입력 파일을 유지합니다.
버전 3.8에서 변경: 새로운 명령 중 인터페이스를 사용법과 함께 추가합니다. 기본적으로, CLI를 실행할 때, 기본 압축 수준은 6입니다.
명령줄 옵션¶
- --fast¶
가장 빠른 압축 방법(압축을 덜 함)을 나타냅니다.
- --best¶
가장 느린 압축 방법(최상의 압축)을 나타냅니다.
- -d, --decompress¶
주어진 파일의 압축을 풉니다.
- -h, --help¶
도움말 메시지를 표시합니다.