Gorio Tech Blog search

파이썬 압축 모듈 간단 예시

|

목차

1. zlib 모듈

import zlib

long_text = b"who are you" * 1000
# 압축하기
compressed = zlib.compress(long_text)

# 압축 풀기
decompressed = zlib.decompress(compressed)

# 동일한지 확인
print(long_text == decompressed)

True

2. gzip 모듈

위에서 사용한 zlib 모듈과 동일하게 compress, decompress 메서드를 사용한다. 파일을 열 때는 open 메서드를 이용하면 된다. 여는 작업에 대한 코드만 첨부한다. bzip2(bz2), lzma(xz) 형식 파일에 대해서도 유사한 메서드를 이용한다.

import gzip

with gzip.open("data.gz", "rt") as file:
    content = file.read()

3. zipfile 모듈

import zipfile

# zip 파일이 맞는지 확인
zipfile.is_zipfile("trasnactions.zip")

# zip 파일 열기
zip = zipfile.ZipFile("trasnactions.zip")

# zip 파일 내 이름 확인 및 추후 사용을 위해 저장
names = []
for name in zip.namelist():
    names.append(name)

print(names)

['transaction1.txt', 'transaction2.txt']

# 첫 번째 파일 압축 해제 과정
# 하나만 압축 해제할 때
# ZipInfo 얻기
zipinfo = zip.getinfo(names[0])
print("Filename: ", zipinfo.filename, "date_time: ", zipinfo.date_time)

Filename:  transaction1.txt date_time:  (2020, 1, 11, 19, 44, 28)

zip.extract(zipinfo)

# 전부 압축 해제할 때
zip.extractall()

# 끝나고 닫아주기
zip.close()

4. tarfile 모듈

위와 유사하다.

import tarfile

# tarfile이 맞는지 확인
tarfile.is_tarfile("transactions.tar")

tar = tarfile.open("transactions.tar")
tar.getnames()

['transaction1.txt', 'transaction2.txt']

# 하나만 압축 해제
tarinfo = tar.getmember(tar.getnames()[0])
print(tarinfo.name, tarinfo.size, tarinfo.mtime, tarinfo.mode)

transaction1.txt 74 1578739467 493

tar.extract(tarinfo)

# 전체 압축 해제
tar.extractall()
tar.close()

Reference

파이썬 라이브러리 레시피, 프리렉 https://docs.python.org/3/library/zipfile.html https://docs.python.org/3/library/tarfile.html