Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 ZIP 아카이브 작업(zipfile)

<시간/>

ZIP은 보관 및 압축에 사용되는 가장 널리 사용되는 파일 형식 중 하나입니다. MSDOS, PC 시절부터 사용되어 왔으며 유명한 PKZIP 애플리케이션에서도 사용하고 있습니다.

Python 표준 라이브러리의 zipfile 모듈은 ZIP 아카이브를 생성, 추출, 읽기 및 쓰기 위한 도구를 용이하게 하는 클래스를 제공합니다.

Zip파일()

이 함수는 내장된 open() 함수에 의해 생성된 문자열 또는 파일 객체가 될 수 있는 파일 매개변수에서 ZipFile 객체를 반환합니다. 이 함수는 읽기, 쓰기 또는 추가 모드에서 아카이브를 열 때 각각 'w' 또는 'a' 값을 사용할 수 있지만 기본값이 'r'인 모드 매개변수가 필요합니다.

아카이브는 기본적으로 압축되지 않습니다. 사용할 압축 알고리즘의 유형을 지정하려면 상수 중 하나를 압축 매개변수에 할당해야 합니다.

일반적인 ZIP 압축 방법의 경우 LZMA 압축 방법의 경우
zipfile.ZIP_STORED 압축되지 않은 아카이브 멤버의 경우.
zipfile.ZIP_DEFLATED. 이를 위해서는 zlib 모듈이 필요합니다.
zipfile.ZIP_BZIP2 BZIP2 압축 방법의 경우. 이것은 bz2 모듈이 필요합니다.
zipfile.ZIP_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 모듈의 클래스와 기능에 대해 논의했습니다.