[Python 모듈] zipfile : ZIP 파일을 읽고 쓰는 모듈

1. zipfile 모듈이란?

 

zipfile 모듈은 파이썬 내장 모듈 중 하나로, ZIP 파일을 읽고 쓰는데 사용되는 모듈입니다. 이 모듈을 사용하면 ZIP 파일 내부의 파일을 열거하고, 읽고, 쓰고, 수정할 수 있습니다.

 

zipfile 모듈은 별도의 설치 과정이 필요없습니다. 모듈을 사용하려면 아래와 같이 import를 하면 됩니다.

import zipfile

 


2. zipfile.ZipFile

 

ZipFile 클래스는 다양한 메서드를 제공하여 ZIP 파일 내부의 파일을 읽고 쓰고, ZIP 파일을 생성하고 압축 해제할 수 있습니다. 객체를 생성하는 데 사용되는 인자는 다음과 같습니다.

 

  • file: ZIP 파일의 경로
  • mode: 파일 모드 ('r': 읽기 모드, 'w': 쓰기 모드, 'a': 추가 모드)
  • compression: 압축 방법 (ZIP_STORED: 압축하지 않음, ZIP_DEFLATED: Deflate 압축)

 

zipfile.ZipFile(file, mode, compression)

 

코드는 zipfile 모듈을 사용하여 example.zip이라는 ZIP 파일을 생성하는 예시입니다. with문을 사용하여 'example.zip' 파일을 쓰기 모드('w')로 열고 zip_ref 변수에 할당합니다. 이제 ZIP 파일에 파일이나 폴더를 추가하면 됩니다. 이는 zip_ref 변수의 메서드를 사용하여 수행할 수 있습니다. with문이 끝나면 ZIP 파일이 자동으로 닫히며, 파일 시스템 리소스를 반환합니다.

 

import zipfile

# ZIP 파일 생성
with zipfile.ZipFile('example.zip', 'w') as zip_ref:

 


2.1 zipfile.ZipFile.write

 

ZipFile.write() 메서드는 ZIP 파일 내부의 파일을 생성할 수 있습니다. write() 메서드는 첫 번째 매개변수로 저장할 파일의 경로를 받으며, 두 번째 매개변수로 저장할 파일의 이름을 받습니다. 파일 이름을 생략하면 저장할 파일의 이름과 동일한 이름으로 생성됩니다.

 

코드에서는 ZipFile.write() 메서드를 사용하여 'example.txt' 파일을 ZIP 파일 내부의 'example.txt' 파일로 저장합니다. 

import zipfile

# ZIP 파일 생성
with zipfile.ZipFile('example.zip', 'w') as zip_ref:
    # 파일 저장
    zip_ref.write('example.txt', 'example.txt')

 


2.2 ZipFile.extract

 

ZipFile.extract() 메서드는 ZIP 파일에서 파일을 추출할 수 있습니다. extract() 메서드는 추출할 파일의 이름을 매개변수로 받아 해당 파일을 현재 디렉터리에 추출합니다. 이 메서드는 압축 해제된 파일의 경로를 반환합니다.

 

코드에서는 ZipFile.extract() 메서드를 사용하여 'example.zip' 파일에서 'example.txt' 파일을 압축 해제합니다. 

import zipfile

# ZIP 파일 열기
with zipfile.ZipFile('example.zip', 'r') as zip_ref:
    # 파일 압축 해제
    zip_ref.extract('example.txt')

 


2.3 zipfile.ZipFile.namelist

 

ZipFile.namelist() 메서드는 ZIP 파일 내부의 파일 목록을 가져올 수 있습니다. ZIP 파일 내부의 모든 파일의 이름을 리스트로 반환합니다. 이 리스트에는 디렉터리 및 파일의 이름이 모두 포함됩니다.

 

코드에서는 ZipFile.namelist() 메서드를 사용하여 'example.zip' 파일 내부의 파일 목록을 가져와서 출력합니다.

import zipfile

# ZIP 파일 열기
with zipfile.ZipFile('example.zip', 'r') as zip_ref:
    # 파일 목록 가져오기
    file_list = zip_ref.namelist()

    # 파일 목록 출력
    for file in file_list:
        print(file)

 


2.4 zipfile.ZipFile.read

 

ZipFile.read() 메서드는 ZIP 파일 내부의 파일을 읽을 수 있습니다. read() 메서드는 읽을 파일의 이름을 매개변수로 받아 해당 파일의 내용을 반환합니다. 반환된 내용은 이진(binary) 형태로 제공됩니다.

 

코드에서는 ZipFile.read() 메서드를 사용하여 'example.zip' 파일 내부의 'example.txt' 파일을 읽습니다. 

import zipfile

# ZIP 파일 열기
with zipfile.ZipFile('example.zip', 'r') as zip_ref:
    # 파일 읽기
    file_content = zip_ref.read('example.txt')

    # 파일 내용 출력
    print(file_content)

 


2.5 zipfile.ZipFile.writestr

 

ZipFile.writestr() 메서드는 ZIP 파일 내부의 파일로 저장합니다. writestr() 메서드는 첫 번째 매개변수로 생성할 파일의 이름을 받으며, 두 번째 매개변수로 문자열 데이터를 받습니다. 이 메서드는 생성한 파일을 닫지 않으므로, 생성한 후에는 close() 메서드를 호출하여 파일을 닫아주어야 합니다.

 

코드에서는 zipfile.ZipFile.writestr() 메서드를 사용하여 'example.txt' 파일을 생성하고, 해당 파일에 'Hello, World!' 문자열 데이터를 저장합니다. with문을 사용했으므로 close()를 호출하지 않아도 자동으로 파일을 닫아줍니다.

import zipfile

# ZIP 파일 생성
with zipfile.ZipFile('example.zip', 'w') as zip_ref:
    # 파일 생성
    zip_ref.writestr('example.txt', 'Hello, World!')

 

 


2.6 zipfile.ZipFile.extractall

 

ZipFile.extractall() 메서드는 ZIP 파일 내부의 모든 파일을 압축 해제합니다. extractall() 메서드는 매개변수로 추출할 경로를 받습니다. 매개변수를 생략하면 현재 디렉토리에 압축 해제됩니다.

 

코드에서는 ZipFile.extractall() 메서드를 사용하여 'example.zip' 파일 내부의 모든 파일을 압축 해제합니다. 

import zipfile

# ZIP 파일 열기
with zipfile.ZipFile('example.zip', 'r') as zip_ref:
    # 모든 파일 압축 해제
    zip_ref.extractall()