ZIP은 보관 및 압축에 사용되는 가장 널리 사용되는 파일 형식 중 하나입니다. MSDOS, PC 시절부터 사용되어 왔으며 유명한 PKZIP 애플리케이션에서도 사용하고 있습니다.
Python 표준 라이브러리의 zipfile 모듈은 ZIP 아카이브를 생성, 추출, 읽기 및 쓰기 위한 도구를 용이하게 하는 클래스를 제공합니다.
Zip파일()
이 함수는 내장된 open() 함수에 의해 생성된 문자열 또는 파일 객체가 될 수 있는 파일 매개변수에서 ZipFile 객체를 반환합니다. 이 함수는 읽기, 쓰기 또는 추가 모드에서 아카이브를 열 때 각각 'w' 또는 'a' 값을 사용할 수 있지만 기본값이 'r'인 모드 매개변수가 필요합니다.
아카이브는 기본적으로 압축되지 않습니다. 사용할 압축 알고리즘의 유형을 지정하려면 상수 중 하나를 압축 매개변수에 할당해야 합니다.
zipfile.ZIP_STORED | 압축되지 않은 아카이브 멤버의 경우. |
zipfile.ZIP_DEFLATED | 일반적인 ZIP 압축 방법의 경우. 이를 위해서는 zlib 모듈이 필요합니다. |
zipfile.ZIP_BZIP2 | BZIP2 압축 방법의 경우. 이것은 bz2 모듈이 필요합니다. |
zipfile.ZIP_LZMA | LZMA 압축 방법의 경우. 이것은 lzma 모듈이 필요합니다. |
ZipFile 개체는 다음 메서드를 사용합니다.
쓰기()
이 메서드는 ZipFile 개체가 나타내는 아카이브에 파일을 제공합니다.
>>> import zipfile >>> newzip=zipfile.ZipFile('newdir/newzip.zip','w') >>> newzip.write('zen.txt') >>> newzip.close()
추가 파일을 추가 모드(모드로 'a')에서 열어 기존 아카이브에 추가 파일을 추가할 수 있습니다.
>>> newzip=zipfile.ZipFile('newdir/newzip.zip','a') >>> newzip.write('zen.txt') >>> newzip.close()
읽기()
이 방법은 아카이브의 특정 파일에서 데이터를 읽습니다.
>>> newzip=zipfile.ZipFile('newdir/newzip.zip','r') >>> data=newzip.read('json.txt') >>> data b'["Rakesh", {"marks": [50, 60, 70]}]'
인쇄 디렉토리()
이 방법은 지정된 아카이브의 모든 파일을 나열합니다.
>>> newzip.printdir() File Name Modified Size json.txt 2018-11-2717:04:40 35 zen.txt 2018-11-2523:13:44 878
추출()
이 방법은 기본적으로 아카이브에서 현재 디렉토리 또는 두 번째 매개변수로 지정된 파일로 지정된 파일을 추출합니다.
>>> newzip.extract('json.txt','newdir') 'newdir\\json.txt'
extractall()
이 방법은 기본적으로 아카이브의 모든 파일을 현재 디렉토리로 추출합니다. 매개변수로 필요한 경우 대체 디렉토리를 지정하십시오.
>>> newzip.extractall('newdir')
정보 입수()
이 메소드는 주어진 파일에 해당하는 ZipInfo 객체를 반환합니다. ZipInfo 개체는 파일의 다른 메타데이터 정보를 포함합니다.
다음 코드는 아카이브에서 'zen.txt'의 ZipInfo 개체를 가져와서 파일 이름, 크기 및 날짜-시간 정보를 검색합니다.
>>> inf = newzip.getinfo('zen.txt') >>> inf.filename,inf.file_size, inf.date_time ('zen.txt', 878, (2018, 11, 25, 23, 13, 45))
정보 목록()
이 메서드는 아카이브에 있는 모든 파일의 ZipInfo 개체 목록을 반환합니다.
>>> newzip.infolist() [<ZipInfo filename = 'json.txt' filemode='-rw-rw-rw-' file_size=35>, <ZipInfo filename = 'zen.txt' filemode='-rw-rw-rw-' file_size=878>]
앞서 언급한 바와 같이 압축 매개변수에는 ZIP 아카이브를 구성할 때 적용할 압축 알고리즘이 지정되어 있다. 다음 코드에서 ZIP-DEFLATED 상수는 zlib 압축을 사용하여 아카이브를 빌드합니다.
>>> zipobj = zipfile.ZipFile('txtzip.zip',mode='w', compression=zipfile.ZIP_DEFLATED) >>> files=glob.glob("*.txt") >>> for file in files: zipobj.write(file) >>> zipobj.close()
이름 목록()
ZipFile 개체의 이 메서드는 아카이브에 있는 모든 파일의 목록을 반환합니다.
>>> zipobj = zipfile.ZipFile('txtzip.zip',mode='r') >>> zipobj.namelist() ['a!.txt', 'data().txt', 'dict.txt', 'json.txt', 'LICENSE.txt', 'lines.txt', 'msg.txt', 'NEWS.txt', 'test.txt/', 'zen.txt', 'zen1.txt', 'zenbak.txt']
암호 설정()
이 메소드는 아카이브 압축을 풀 때 제공해야 하는 비밀번호 매개변수를 설정합니다.
파이집파일()
zipfile 모듈의 이 함수는 PyZipFile 객체를 반환합니다. PyZipFile 객체는 확장자가 .py인 파일을 포함하는 모듈을 생성할 수 있습니다. 이 아카이브는 zipimport 모듈을 사용하여 모듈을 가져올 수 있도록 sys.path 환경 변수에 추가할 수 있습니다.
writepy() 메소드는 .py 파일을 각각의 .pyc 파일로 컴파일한 후 아카이브에 추가합니다.
files=glob.glob("*.py") >>> pyzipobj = zipfile.PyZipFile('pyfiles/pyzip.zip', mode='w', compression=zipfile.ZIP_LZMA) >>> for file in files: pyzipobj.writepy(file) >>> pyzipobj.close()
이 기사에서는 zipfile 모듈의 클래스와 기능에 대해 논의했습니다.