[Python] zipfile 모듈, 압축파일 다루기

업데이트:

개요

jpg

zipfile모듈은 압출파일을 다루는 모듈로써,어떤 파일들을 압축하거나 그 압축파일을 다시 해제하거나 파일들의 정보를 읽는 등 다양하게 활용되는 함수이다.

파일경로 등이 많이 사용되므로 앞의 os모듈 포스팅에서 다뤘던 os모듈도 같이 불러오자.

import zipfile
import os


1. 압축하기

1-1. 개별파일 압축하기 : zip객체.write()

텍스트파일을 open해 ‘w’모드로 쓰는 것과 마찬가지로 zip파일을 만들고 그 안에 압축할 파일들을 쓰는(write) 방식으로 사용한다.

my_zip = zipfile.ZipFile("C:/Users/User/Desktop/test_zip.zip", 'w')  # zip파일 쓰기모드
my_zip.write('C:/Users/User/Desktop/test1.txt')         # 압축할 파일 write
my_zip.close()     # zip파일 close

하지만 이렇게 하면 파일만 압축하는게 아니라, 그 모든 경로들을 전부 압축해버리기 때문에 작업디렉토리를 이동해서 작업하는 게 좋다.

os.chdir("C:/Users/User/Desktop/")

my_zip = zipfile.ZipFile("test_zip.zip", 'w')
my_zip.write('test1.txt')
my_zip.close()

1-2. 여러파일 압축하기 : for문 zip객체.write()

여러파일을 압축하려면 위와 같은 방식으로 진행하되 그냥 for문으로 write해주기만 하면된다.
이번에는 with문을 이용해보자.

file_ls = ['test1.txt', 'test2.txt', 'test3.txt', 'testtest.csv']
with zipfile.ZipFile("test_zip.zip", 'w') as my_zip:
    for i in file_ls:
        my_zip.write(i)
    my_zip.close()

4개의 파일이 test_zip이라는 압축파일로 압축된 것을 알 수 있다.


2. 압축해제

2-1. 개별파일 압축해제 : extract()

extract(압축해제할 파일명, 압축해제할 경로) 로 이용하며, 압축파일 안에서도 파일을 골라서 압축해제 할 수 있다.

zipfile.ZipFile('test_zip.zip').extract('test1.txt')
[Output]
'C:\\Users\\User\\Desktop\\test1.txt'

경로를 반환해주고, 해당파일 압축을 해제한 것을 알 수 있다.

2-2. 모든파일 압축해제 : extractall()

extractall(압축해제할 경로)로 이용되며, 해당 압축파일을 해당 경로에 모두 압축해제를 시켜준다.
당연히 경로를 지정하지 않으면, 현재 작업디렉토리에 바로 압축이 해제된다.

zipfile.ZipFile('test_zip.zip').extractall()


3. zip파일 읽기

3-1. 특정 파일 읽기 : read()

read()함수는 해당 파일을 읽어주는

my_zip = zipfile.ZipFile('test_zip.zip')
my_zip.read('testtest.csv')
[Output]
b'no,value\r\ntest1,1\r\ntest2,2\r\ntest3,3\r\ntest4,4\r\n'

참고로 testtest.csv 파일은 아래와 같이 생긴 파일이다.

print(pd.read_csv('testtest.csv', sep=','))
[Output]
      no  value
0  test1      1
1  test2      2
2  test3      3
3  test4      4

*read()함수는 인코딩과 디코딩의 개념을 통해 더 자세한 응용이 가능해지나 이 부분은 추후에 포스팅 할 예정이다.

3-2. 압축파일 내 파일명 읽기 : namelist()

압축파일 내에 존재하는 파일명을 리스트로 반환해주는 함수로, 유용하게 사용된다.

my_zip = zipfile.ZipFile('test_zip.zip')
my_zip.namelist()
[Output]
['test1.txt', 'test2.txt', 'test3.txt', 'testtest.csv']

3-3. 압축파일정보 확인 : getinfo()

getinfo()함수는 압축파일 내에 들어 있는 개별 파일의 정보를 읽을 수 있게 도와주는 함수이다.
Zipinfo객체를 반환하는데, 이 객체는 다양한 정보들을 지니고 있다.

zp_info = my_zip.getinfo('testtest.csv')   # csv파일의 Zipinfo객체 생성
print(zp_info.filename)                    # 파일명
print(zp_info.file_size)                   # 파일용량
print(zp_info.date_time)                   # 작성일자
print(zp_info.compress_size)               
print(zp_info.comment)                     # 주석문

댓글남기기