py7zr
python의 7z을 사용할 수 있는 패키지 입니다.
압축 해제가 예제들은 많이 있는데 멀티 볼륨에 대한 압축 방법 설명이 미흡해서 찾아봤습니다.
예제
import py7zr # pip install py7zr import multivolumefile # pip install multivolumefile import random import os # https://py7zr.readthedocs.io/en/latest/user_guide.html # https://py7zr.readthedocs.io/en/latest/api.html def make_random_file(file_name,file_size): f = open(file_name, "wb") for i in range(int(file_size/2)): random_v = random.random() random_v = (random_v * 65536) % 65536 random_v = int(random_v) f.write(random_v.to_bytes(2, 'big')) f.close() orifile = "test.bin" # 압축 하려고 하는 파일 outfile = "out/output1.7z" # 압축된 결과 파일 try: os.mkdir("out") except: pass # 임시 파일 make_random_file(orifile,3*1024) filters=[{'id':py7zr.FILTER_COPY}] ''' LZMA2 + Delta [{'id': FILTER_DELTA}, {'id': FILTER_LZMA2, 'preset': PRESET_DEFAULT}] LZMA2 + BCJ [{'id': FILTER_X86}, {'id': FILTER_LZMA2, 'preset': PRESET_DEFAULT}] LZMA2 + ARM [{'id': FILTER_ARM}, {'id': FILTER_LZMA2, 'preset': PRESET_DEFAULT}] LZMA + BCJ [{'id': FILTER_X86}, {'id': FILTER_LZMA}] LZMA2 [{'id': FILTER_LZMA2, 'preset': PRESET_DEFAULT}] LZMA [{'id': FILTER_LZMA}] BZip2 [{'id': FILTER_BZIP2}] Deflate [{'id': FILTER_DEFLATE}] ZStandard [{'id': FILTER_ZSTD, 'level': 3}] PPMd [{'id': FILTER_PPMD, 'order': 6, 'mem': 24}] [{'id': FILTER_PPMD, 'order': 6, 'mem': "16m"}] Brolti [{'id': FILTER_BROTLI, 'level': 11}] 7zAES + LZMA2 + Delta [{'id': FILTER_DELTA}, {'id': FILTER_LZMA2, 'preset': PRESET_DEFAULT}, {'id': FILTER_CRYPTO_AES256_SHA256}] 7zAES + LZMA2 + BCJ [{'id': FILTER_X86}, {'id': FILTER_LZMA2, 'preset': PRESET_DEFAULT}, {'id': FILTER_CRYPTO_AES256_SHA256}] 7zAES + LZMA [{'id': FILTER_LZMA}, {'id': FILTER_CRYPTO_AES256_SHA256}] 7zAES + Deflate [{'id': FILTER_DEFLATE}, {'id': FILTER_CRYPTO_AES256_SHA256}] 7zAES + BZip2 [{'id': FILTER_BZIP2}, {'id': FILTER_CRYPTO_AES256_SHA256}] 7zAES + ZStandard [{'id': FILTER_ZSTD}, {'id': FILTER_CRYPTO_AES256_SHA256}] ''' # 분할 압축 with multivolumefile.open(outfile, mode='wb', volume=1023) as target_archive: with py7zr.SevenZipFile(target_archive, 'w', filters=filters) as archive: archive.writeall(orifile) for fileinfo in target_archive._fileinfo: print(fileinfo.filename) # 압축한 파일 이름을 알 수 있음 outfile = "out/output2.7z" # 압축된 결과 파일 # 분할 압축 with multivolumefile.open(outfile, mode='wb', volume=1023) as target_archive: with py7zr.SevenZipFile(target_archive, 'w') as archive: archive.writeall(orifile) for fileinfo in target_archive._fileinfo: print(fileinfo.filename) # 압축한 파일 이름을 알 수 있음
예제 설명
임시 파일을 만들고 멀티 볼륨으로 압축하는 예제입니다. 여기에서는 알고리즘 선택을 압축 안함과 기본값으로 하는 두가지 예제입니다.
압축 안함의 경우 filters 값을 COPY로 설정하면 됩니다.
filters=[{'id':py7zr.FILTER_COPY}]
filters 인자를 넘기지 않으면 기본값 상태로 압축을 하게됩니다.
일부 코드 에서는 volume_size로 입력하는곳이 있는데 에러가 발생합니다. volume을 사용해주세요
실행결과
out\output1.7z.0001 out\output1.7z.0002 out\output1.7z.0003 out\output1.7z.0004 out\output2.7z.0001 out\output2.7z.0002 out\output2.7z.0003 out\output2.7z.0004
댓글 없음:
댓글 쓰기