>  기사  >  백엔드 개발  >  Python에서 ZIP 파일을 압축 및 압축 해제하는 방법

Python에서 ZIP 파일을 압축 및 압축 해제하는 방법

黄舟
黄舟원래의
2017-10-04 09:26:051564검색

이 글에서는 주로 Python에서 ZIP 파일을 압축 및 압축 해제하는 방법을 소개합니다. Python에서 ZIP 파일을 압축 및 압축 해제하는 일반적인 작업 기술을 구체적인 예를 기반으로 분석합니다. ZIP 파일을 압축 및 압축 해제하는 Python 메소드 구현. 참조를 위해 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

때때로 Python에서 zip 파일을 사용해야 하는 경우가 있는데, 버전 1.6에서는 Python이 이미 이러한 작업을 수행하기 위해 zipfile 모듈을 제공합니다. 그러나 Python의 zipfile 모듈은 다중 볼륨 상황을 처리할 수 없지만 이러한 상황은 드물기 때문에 일반적인 사용에는 충분합니다. 아래에는 대부분의 상황을 처리하기에 충분한 몇 가지 기본적인 zip 파일 작업을 기록했습니다.

zipfile 모듈을 사용하면 zip 파일을 열거나 쓸 수 있습니다. 예:

import zipfile
z = zipfile.ZipFile('zipfilename', mode='r')

zip 파일을 엽니다. 모드가 'w' 또는 'a'인 경우 zip 파일을 작성한다는 의미입니다. 작성하는 경우 세 번째 매개변수를 따를 수도 있습니다.

compression=zipfile.ZIP_DEFLATED 또는 압축=zipfile.ZIP_STORED ZIP_DEFLATED를 사용하는 경우 zlib 모듈을 컴파일해야 합니다. 후자는 zip으로만 포장되어 있고 압축되지 않았습니다.

zip 파일을 연 후 필요에 따라 zip 파일의 내용을 읽거나 zip 파일에 내용을 저장할 수 있습니다.

zip의 내용을 읽는

은 매우 간단합니다. zipfile 객체는 read(name) 메소드를 제공합니다. name은 zip 파일의 파일 항목입니다. 실행이 완료된 후 읽은 내용을 원하는 파일에 저장할 수 있습니다.

zip 파일을 작성하는 방법에는 두 가지가 있습니다

. 하나는 기존 파일에 직접 작성하는 것이고, 다른 하나는 문자열을 작성하는 것입니다.

zipfile 객체를 사용한 첫 번째 쓰기(filename, arcname,compress_type)의 경우 마지막 두 매개 변수를 무시할 수 있습니다. 첫 번째 매개변수는 파일 이름이고, 두 번째 매개변수는 zip 파일의 이름입니다. 지정하지 않으면 파일 이름과 동일한 이름이 사용됩니다. 압축 유형은 zip 파일을 생성할 때 매개변수를 재정의하는 압축 플래그입니다. 두 번째 방법은 zipfile 객체의 writestr(zinfo_or_arcname, bytes)를 사용하는 것입니다. 첫 번째 매개변수는 zipinfo 객체 또는 압축 파일에 작성된 압축 이름이고, 두 번째 매개변수는 문자열입니다. 파일 내용을 동적으로 구성하려면 이 방법을 사용합니다.

읽을 때 내용만 읽을 수 있으므로 디렉터리 구조에 따라 zip 파일을 확장하려면 디렉터리 생성, 파일 생성 및 쓰기 등 이러한 작업을 직접 완료해야 한다는 점에 유의해야 합니다. . 작성 시 zip 파일의 디렉토리 구조를 필요에 따라 동적으로 구성할 수 있어 원래 디렉토리 구조를 따르지 않고도 zip 파일을 생성할 수 있습니다.

그래서 사용 편의성을 위해 자체 ZFile 클래스를 만들었습니다. 이 클래스는 주로 winrar의 오른쪽 클릭 메뉴에 있는 압축 기능, 즉 zip 파일을 지정된 디렉터리로 압축하고 해당 하위 디렉터리를 자동으로 생성하는 기능을 구현합니다. 또 다른 하나는 zip 파일을 생성하는 편리함입니다. 수업 소스 코드는 다음과 같습니다:

# coding:cp936
# Zfile.py
# xxteach.com
import zipfile
import os.path
import os
class ZFile(object):
  def __init__(self, filename, mode='r', basedir=''):
    self.filename = filename
    self.mode = mode
    if self.mode in ('w', 'a'):
      self.zfile = zipfile.ZipFile(filename, self.mode, compression=zipfile.ZIP_DEFLATED)
    else:
      self.zfile = zipfile.ZipFile(filename, self.mode)
    self.basedir = basedir
    if not self.basedir:
      self.basedir = os.path.dirname(filename)
  def addfile(self, path, arcname=None):
    path = path.replace('//', '/')
    if not arcname:
      if path.startswith(self.basedir):
        arcname = path[len(self.basedir):]
      else:
        arcname = ''
    self.zfile.write(path, arcname)
  def addfiles(self, paths):
    for path in paths:
      if isinstance(path, tuple):
        self.addfile(*path)
      else:
        self.addfile(path)
  def close(self):
    self.zfile.close()
  def extract_to(self, path):
    for p in self.zfile.namelist():
      self.extract(p, path)
  def extract(self, filename, path):
    if not filename.endswith('/'):
      f = os.path.join(path, filename)
      dir = os.path.dirname(f)
      if not os.path.exists(dir):
        os.makedirs(dir)
      file(f, 'wb').write(self.zfile.read(filename))
def create(zfile, files):
  z = ZFile(zfile, 'w')
  z.addfiles(files)
  z.close()
def extract(zfile, path):
  z = ZFile(zfile)
  z.extract_to(path)
  z.close()

위 내용은 Python에서 ZIP 파일을 압축 및 압축 해제하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.