티스토리
.7z format을 지원하는 라이브러리
7z 압축 포맷은 고압축률로 잘 알려져 있으며, 파이썬에서 이 포맷을 다루기 위해 여러 서드파티 라이브러리가 개발되었습니다. 주요 7z 파일 처리용 라이브러리와 각각의 특징을 아래에 소개하고, 사용 상황에 따른 추천을 드리겠습니다.
1. 코드리뷰
실무에서 매우 유용하게 쓰이는 코드이며, 관련 앱 개발에 필수로 고려해야 될 사항으로 생각 되네요.
이 코드들을 작성하기 전에, py7zr 라이브러리가 설치되어 있어야 합니다. 설치가 필요한 경우, pip install py7zr 명령어로 설치할 수 있습니다. |
# 필요한 코드를 Python Code Interpreter에서 작성 및 최적화합니다.
# 1. 기본적인 압축 파일 생성
import py7zr
def create_archive(archive_name, file_paths):
with py7zr.SevenZipFile(archive_name, 'w') as archive:
for file_path in file_paths:
archive.writeall(file_path, arcname=None) # arcname을 None으로 설정하면 파일 경로에서 마지막 부분을 사용
# 2. 압축 파일 해제
def extract_archive(archive_name, output_path):
with py7zr.SevenZipFile(archive_name, 'r') as archive:
archive.extractall(path=output_path)
# 3. 파일 목록 조회
def list_archive_contents(archive_name):
with py7zr.SevenZipFile(archive_name, 'r') as archive:
return archive.getnames()
# 4. 암호화된 압축 파일 생성
def create_encrypted_archive(archive_name, file_paths, password):
with py7zr.SevenZipFile(archive_name, 'w', password=password) as archive:
for file_path in file_paths:
archive.writeall(file_path, arcname=None)
# 5. 여러 폴더를 개별 압축 파일로 생성
def create_multiple_archives(folder_paths):
for folder_path in folder_paths:
archive_name = f"{folder_path}.7z"
with py7zr.SevenZipFile(archive_name, 'w') as archive:
archive.writeall(folder_path, arcname=None)
# 함수 호출은 주석 처리하여 실행 방지
# create_archive('example.7z', ['file1.txt', 'file2.txt'])
# extract_archive('example.7z', 'output_folder')
# contents = list_archive_contents('example.7z')
# create_encrypted_archive('encrypted.7z', ['file1.txt', 'file2.txt'], 'password')
# create_multiple_archives(['folder1', 'folder2'])
아래 클릭후 추가 리뷰 내용 확인
py7zr.SevenZipFile을 사용할 때 with 문을 사용하는 구체적인 이유는 다음과 같습니다:
- with 문을 사용하는 주된 이유는 리소스 관리입니다. 특히, 파일 작업을 할 때 with 문을 사용하면 파일을 열고 나서 작업이 완료되면 자동으로 파일을 닫아주기 때문에 매우 유용합니다. 이는 파일 핸들 누수를 방지하고 코드를 더 안전하게 만들어줍니다.
자동 리소스 해제: with 문은 context manager 프로토콜을 사용합니다. py7zr.SevenZipFile 클래스는 이 프로토콜을 구현하며, with 블록의 실행이 끝날 때 자동으로 close() 메서드를 호출합니다. 이는 열린 압축 파일이 안전하게 닫히도록 보장하며, 모든 데이터가 올바르게 기록되고 버퍼가 비워지는 것을 확실하게 합니다.
예외 처리: 파일 작업 중에 예외가 발생할 경우, with 문은 예외를 적절히 처리할 수 있는 구조를 제공합니다. 즉, 예외가 발생하더라도 SevenZipFile 객체의 close() 메서드가 호출되어 리소스가 제대로 해제됩니다. 이는 파일이나 다른 시스템 리소스가 잠기는 상황을 방지합니다.
코드의 가독성: with 문을 사용하면 리소스 관리 로직을 명시적으로 보여주지 않아도 됩니다. 코드를 읽는 사람은 with 블록 내에서 열린 리소스가 블록을 벗어나는 순간 안전하게 해제될 것이라는 것을 알 수 있으므로, 코드의 의도를 더 쉽게 파악할 수 있습니다.
결론적으로, with py7zr.SevenZipFile('your_large_file.7z', mode='r') as z: 구문을 사용함으로써, .7z 파일을 열고 작업 후 자동으로 닫으며, 이 과정에서 발생할 수 있는 예외를 관리하고, 코드의 안정성과 가독성을 향상시키는 이점을 얻을 수 있습니다.
2. 함수별 코드리뷰
|
마무리
- 이번 포스팅은 py7zr 라이브러리 사용하는 방법에 대해 알아봤습니다.
- 7z 압축 포맷은 고압축률로 잘 알려져 있으며, 파이썬에서 이 포맷을 다루기 위해 여러 서드파티 라이브러리가 개발되었습니다. 주요 7z 파일 처리용 라이브러리와 각각의 특징을 아래에 소개하고, 사용 상황에 따른 추천을 드리겠습니다.
1. py7zr 특징: 파이썬에서 7z 압축 포맷을 직접적으로 다룰 수 있는 가장 대표적인 라이브러리입니다. LZMA와 LZMA2 압축 알고리즘을 지원하며, 파일 압축, 압축 해제, 암호화, 복수 볼륨 처리 등 다양한 기능을 제공합니다. 적합한 사용 상황: 고압축률을 요구하는 다양한 프로젝트에서 7z 파일을 생성하거나 압축 해제할 필요가 있을 때. 2. libarchive 특징: libarchive는 다양한 압축 포맷을 지원하는 C 라이브러리이며, 파이썬에서는 python-libarchive를 통해 사용할 수 있습니다. 7z 포맷을 포함하여 tar, rar 등 여러 압축 포맷을 지원합니다. 적합한 사용 상황: 다양한 압축 포맷을 하나의 라이브러리에서 지원받고 싶을 때, 특히 다양한 타입의 압축 파일을 처리해야 하는 경우. 3. PyLZMA 특징: LZMA 압축 알고리즘에 초점을 맞춘 라이브러리로, 7z 파일 내의 LZMA 압축을 사용한 파일들을 처리할 수 있습니다. 비록 7z 포맷의 모든 기능을 지원하지는 않지만, LZMA 알고리즘을 사용하는 파일에 대해서는 좋은 성능을 제공합니다. 적합한 사용 상황: LZMA 압축에 특화된 작업을 할 때, 특히 7z 파일 내의 LZMA 압축된 내용을 다루고 싶을 때. 추천 대부분의 경우, py7zr를 추천합니다. 이 라이브러리는 7z 파일 포맷에 대한 광범위한 지원을 제공하며, 파이썬 생태계 내에서 가장 널리 사용되고 있습니다. 사용하기 쉬운 API와 고압축률, 다양한 기능을 제공하기 때문에 대부분의 7z 관련 작업에 적합합니다. 다만, 프로젝트에서 다양한 압축 포맷을 동시에 다뤄야 한다면, libarchive를 고려할 수 있습니다. 이 라이브러리는 여러 압축 포맷에 대한 지원을 제공하므로, 하나의 라이브러리로 여러 작업을 처리할 수 있는 유연성을 제공합니다. 각 라이브러리의 설치와 사용 방법은 다음과 같습니다: py7zr 설치: pip install py7zr python-libarchive 설치: pip install libarchive PyLZMA 설치: pip install pylzma 프로젝트 요구 사항과 환경에 맞는 라이브러리를 선택하여 고효율적인 압축 작업을 수행할 수 있습니다. |
궁금한 사항은 lution2@gmail.com로 문의사항 주시면 답변 드리겠습니다.
감사합니다.
'PYTHON 파이썬' 카테고리의 다른 글
파이썬 python tar.gz 압축파일 tarfile 에러 무시하고 파일을 최대한 풀기. (0) | 2024.03.28 |
---|---|
Github 에서 폴더명 생성하는 방법 (0) | 2024.03.23 |
파이썬 python 파이참 pycharm 설치 하기 (0) | 2024.03.19 |
파이썬(python) try except 구문 (3) | 2024.03.18 |
파이썬 십진수를 이진수로 변환 (0) | 2024.03.17 |