1989년 만든 무손실 압축(Lossless compression) 방식입니다. 여러개의 파일을 압축해서 하나의 파일로 만들기 위한 포맷과 ZIP 내부의 데이터 압축하는 알고리즘을 사용합니다. (Docment)
사실 개발을 하면서 zip을 사용해본 적은 없습니다. 다만 운영자로 저장 용량을 줄이기 위한 스크립트로 사용하는 경우가 있긴합니다.
무손실 압출(Lossless compression)이 있으니 손실 압축도 있겠죠? 사진, 음악, 동영상 등 주로 멀티미디어 데이터에서 인간이 지각하기 힘든 범위의 데이터를 버리고 압축하는 방법을 말합니다.
예를 들면 Youtube 같은 것에서 사용자의 화질에 따라 다르기 보내는 것을 생각하시면 이해는 빠를 것 같습니다. 그리고보니 요즘 Opencv를 통해 이미지를 컨트롤 해보고 있는데 무손실 압축도 한번 해봐야겠네요.
다시 주제를 이야기 해보겠습니다. 무손실 압축은 방식에 따라 다르지만, 원리는 파일 내에서 디지털 패턴이 여러 번 나오는 것을 줄이는 방식입니다.
간다한 예를 들면 “abcabcabc”와 같은 데이터를 “3abc”와 같이 변경하는 것으로 보면됩니다. 물론 너무 많은게 생략된 설명이지만 개념은 이렇게 이해는 되시죠?
Zip(Lossless compression) Code
import os
import zipfile
def file_zip(source, target):
f_zip = zipfile.ZipFile(source, 'w')
f_zip.write(target, compress_type=zipfile.ZIP_DEFLATED)
f_zip.close()
def files_zip_all(source, filetype_target):
f_zip = zipfile.ZipFile(source, 'w')
for folder, subfolders, files in os.walk(os.path.join(os.path.dirname(
os.path.dirname(os.path.abspath(__file__))), 'tmp')):
for file in files:
if file.endswith(filetype_target):
f_zip.write(os.path.join(folder, file),
os.path.relpath(os.path.join(folder, file),
os.path.join(os.path.dirname(
os.path.dirname(os.path.abspath(__file__))), 'tmp')),
compress_type=zipfile.ZIP_DEFLATED)
f_zip.close()
def file_unzip(source, target):
f_zip = zipfile.ZipFile(source)
f_zip.extract(target, os.path.dirname(os.path.abspath(__file__)))
f_zip.close()
def file_all_unzip(source):
f_zip = zipfile.ZipFile(source)
f_zip.extractall(os.path.dirname(os.path.abspath(__file__)))
f_zip.close()
if __name__ == "__main__":
file_zip('compress.zip', 'source.file') #files_zip('compress.zip', './')
file_unzip('compress.zip', 'source.file')
file_all_unzip('compress.zip')
os.remove('compress.zip')
코드가 좀 복잡해 보이긴합니다. 이유는 폴더 내부까지 압축을 하게 하는 함수 ‘files_zip_all’가 있어서 좀 복잡해 보이긴합니다. 이렇게 보니 사실 shell을 이용하는게 더 편해 보이네요.
다만 제가 프로그래머로 20년이 지났지만 아직도 변하지 않은 생각 중 하나는 “프로그래머는 언어를 가리지 않는다.”라는 이야기 입니다. 만약 제가 프로그램에서 zip이 필요하게 되면 windows 기반 이면 이 코드를 사용하고, linux 계열이면 사용하지 않을것 같은 코드입니다. 간단하게 shell 명령어를 사용할 것 같습니다.
Output
compreass.zip
최근 무손실 압축 프로그램을 보면 다양한 알고리즘으로 압축 정도나 속도를 정하는 경우도 많이 있습니다. (큰차이 없는 경우도 많습니다.) 이렇게 선택을 한다는 것은