본문 바로가기
Python/Basic

[파이썬, Python] 파일 입출력 라이브러리 - 3️⃣ zlib, gzip, zipfile, tarfile_파이썬으로 파일 압축/압축 해제하기!

by coding-choonsik 2023. 3. 14.
728x90
반응형
SMALL

1. 데이터 압축

  • 대용량 데이터 및 대량의 파일을 전송 시 전송 속도가 느리며 전송 문제가 발생할 가능성이 매우 높음
  • 데이터 압축의 종류
    • 손실 압축: 사람이 눈치채지 못할 수준의 정보만 버리고 압축하는 방법
    • 무손실 압축: 데이터 손실이 전혀 없는 압축
  • 압축률: 압축된 자료량(압축된 데이터 크기) / 원시 자료량(원래 데이터 크기)
  • 다양한 압축 알고리즘에 따라 압축 성능 및 시간이 좌우됨
  • 압축: 인코딩(encoding)
  • 압축 해제: 디코딩(decoding)

2.  zlib

  • 데이터를 압축하거나 해제할 때 사용하는 모듈
  • compress()decompress() 함수로 데이터를 압축하거나 해제
  • 데이터 크기를 줄여서 전송이 필요한 경우 사용

✅ 'Hello Python!'을 10000번 작성한 문자열을 압축하기

import zlib

data = 'Hello Python!' * 10000

print(len(data))  
>>> 130000      # 130000 bytes

# compress(): a bytes-like object is required  -> 인코딩 필요
compress_data = zlib.compress(data.encode(encoding='utf-8'))
print(len(compress_data))  
>>> 293

✅ 압축한 데이터를 해제하기

org_data = zlib.decompress(compress_data).decode('utf-8')  # 인코딩해준 유니코드와 동일
print(len(org_data))
>>> 130000

3. gzip

  • 파일을 압축하거나 해제할 때 사용하는 모듈
  • 내부적으로 zip 알고리즘을 사용
  • with문 사용
  • .gz 확장명

✅ 'Hello Python!'을 10000번 작성한 txt파일을 압축하기

import gzip
data = 'Hello Python!' * 10000

# org_data.txt 파일 만듦
with open('org_data.txt', 'wt')as f:
    f.write(data)
    
# # 파일을 압축하고 내용을 'utf-8'로 인코딩함
with gzip.open('compressed.txt.gz', 'wb')as f:
    f.write(data.encode('utf-8'))

현재 경로에 compressed.txt.gz 압축파일이 만들어졌다.


 

compressed.txt.gz  압축 해제하기

with gzip.open('compressed.txt.gz', 'rb')as f:   # 읽기 모드
    org_data = f.read().decode('utf-8')
    
len(org_data)    
>>> 130000

4. zipfile

  • 여러개의 파일을 zip 확장자로 합쳐서 압축할 때 사용하는 모듈

✅ sample 폴더의 여러개의 파일을 합쳐 zip 확장자로 압축하기

import zipfile

with zipfile.ZipFile('./sample/새파일.zip','w') as myzip:
    myzip.write('./sample/새파일1.txt')
    myzip.write('./sample/새파일2.txt')
    myzip.write('./sample/새파일3.txt')
    myzip.write('./sample/새파일4.txt')
    myzip.write('./sample/새파일5.txt')

새파일.zip 압축파일이 생성되었다.


 

✅ 새파일.zip 압축파일 해제하기

with zipfile.ZipFile('./sample/새파일.zip') as myzip:
    myzip.extractall()

기존의 파일을 지우고 확인해봤다.

압축 해제가 잘 되었다.


5. tarfile

  • 여러개의 파일을 tar 확장자로 합쳐서 압축할 때 사용하는 모듈

✅ sample 폴더의 여러개의 파일을 합쳐 tar 확장자로 압축하기

 

import tarfile 

# add()메소드 사용
with tarfile.open('./sample/새파일.tar','w') as mytar:
    mytar.add('./sample/새파일1.txt')
    mytar.add('./sample/새파일2.txt')
    mytar.add('./sample/새파일3.txt')
    mytar.add('./sample/새파일4.txt')
    mytar.add('./sample/새파일5.txt')

압축해제와 비교하기 위해 파일들을 지웠다.

 

✅ tar 압축 파일 해제하기

with tarfile.open('./sample/새파일.tar') as mytar:
    mytar.extractall()

 

 

압축해제가 잘 되었다.😀


 

📄 주피터 노트북으로 작성한 파일

24_파일 입출력 라이브러리.ipynb
0.15MB

 

728x90
반응형
LIST