728x90
반응형

 티스토리 

 

.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. 함수별 코드리뷰

  1. create_archive: 지정된 파일이나 폴더들을 .7z 파일로 압축합니다. 여기서 file_paths는 압축하고자 하는 파일 경로의 리스트입니다.
  2. extract_archive: .7z 파일을 지정된 경로에 해제합니다. archive_name은 해제하고자 하는 .7z 파일의 이름이며, output_path는 파일이 해제될 경로입니다.
  3. list_archive_contents: .7z 압축 파일 내의 파일 목록을 조회합니다. 파일 목록은 파일 이름의 리스트로 반환됩니다.
  4. create_encrypted_archive: 비밀번호를 사용하여 파일이나 폴더들을 암호화된 .7z 파일로 압축합니다. password 파라미터를 통해 암호화에 사용될 비밀번호를 설정할 수 있습니다.
  5. create_multiple_archives: 주어진 폴더들 각각을 별도의 .7z 파일로 압축합니다. 각 폴더 이름에 기반하여 압축 파일 이름이 결정됩니다.
이 코드는 py7zr 라이브러리가 설치된 Python 환경에서 실행할 수 있으며, 필요에 따라 코드를 수정하여 다른 상황에 맞게 사용할 수 있습니다. 코드의 사용 예제나 추가적인 기능이 필요한 경우, 질문해 주세요. ​

 

 

728x90

마무리

- 이번 포스팅은 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로 문의사항  주시면 답변 드리겠습니다.
감사합니다.

 

 

728x90
반응형

+ Recent posts