지난 시간에는 파이썬 표준 라이브러리 중 os 에 대해서 알아보았습니다.
이번 포스팅에서는 파이썬 표준 라이브러리 중 zipfile 과 tempfile 에 대해 공부 해 보도록 하겠습니다
- 76. 파이썬 os 표준 라이브러리
- 75. 파이썬 shutil, glob, pickle 표준 라이브러리
- 74. 파이썬 표준 라이브러리 operator.itemgetter operator.attrgetter
파이썬 표준 라이브러리
zipfile
zipfile 은 여러 개의 파일 들을 zip 형식으로 합치거나 이를 해제할 때 사용되는 모듈입니다.
아래와 같이 3개의 파이썬 파일이 있다고 해봅시다
a.py
b.py
c.py
이렇게 3개의 파이썬 파일을 하나로 합쳐서 mypython.zip 이라는 파일로 만들고
이 파일들을 원래의 파이썬 파일 3개로 해제 하는 프로그램을 만들어 보겠습니다.
zipfile.ZipFile()
아래는 zipfile.ZipFile() 함수를 사용한 코드입니다.
# zip_test.py
import zipfile
# 파일 하나로 합치기
with zipfile.ZipFile('mypython.zip', 'w') as myzip:
myzip.write('a.py')
myzip.write('b.py')
myzip.write('c.py')
# 하나로 합친 파일 다시 해제하기
with zipfile.ZipFile('mypython.zip') as myzip:
myzip.extractall()
위 코드처럼 ZipFile 객체의 write() 함수로 개별 파일들을 추가하고 extreactall() 함수를 사용하면 모든 파일을 해제 할 수가 있습니다.
합쳐져 있는 파일에서 특정 파일만 해제를 하고 싶다면 아래 코드와 같이 extract() 함수를 사용을 하면 됩니다.
with zipfile.ZipFile('mypython.zip') as myzip:
myzip.extract('a.py')
만약에 파일을 압축해서 묶고 싶은 경우에는 compression, compresslevel 옵션을 사용 할 수도 있습니다.
with zipfile.ZipFile('mypython.zip', 'w', compression=zipfile.Zip_LZMA, compresslevel=9) as myzip:
(....생략....)
compression 에는 4가지의 종류가 있습니다.
- ZIP_STORED : 압축하지 않고 파일을 zip 으로만 묶는 작업을 합니다. 속도가 빠릅니다.
- ZIP_DEFLATED : 일반적인 ZIP 압축으로서 속도가 빠르고 압축률은 낮습니다. 그리고 호환성이 좋습니다.
- ZIP_BZIP2 : bzip2 압축으로 압축률이 높고 속도가 느립니다.
- ZIP_LZMA : lzma 압축으로 압축률이 높고 속도가 느립니다.(7zip 프로그램과 동일한 알고리즘으로 알려져 있습니다.)
compressionlevel 은 압축 수준을 의미하는 숫자입니다.
압축 수준은 1 에서 9 까지 사용을 하며
1 이 속도가 가장 빠르고 압축률이 낮으며
9 가 속도는 가장 느리고 압축률은 높습니다.
tempfile
파일을 임시로 만들어서 사용하는 경우에 tempfile 을 유용하게 사용할 수 있습니다.
tempfile.mkstemp()
tempfile.mkstemp() 는 중복되지 않는 임시 파일의 이름을 랜덤 하게 만들어서 리턴을 해줍니다.
>>> import tempfile
>>> filename = tempfile.mkstemp()
>>> filename
(3, 'C:\\Users\\donnr\\AppData\\Local\\Temp\\tmpmbfgnpr5')
>>>
tempfile.TemporaryFile()
tempfile.TemporaryFile() 은 임시 저장 공간으로 사용할 파일 객체를 리턴을 해 줍니다.
이 파일은 기본적으로 바이너리 쓰기 모드(wb) 의 성격을 가지고 있습니다.
f.close() 가 호출이 되면 자동으로 삭제가 됩니다.
>>> import tempfile
>>> f = tempfile.TemporaryFile()
>>> f.close()
- 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
