Python 압축 및 압축 풀기 ZIP 파일 의 방법 분석

이 글 의 실례 는 Python 이 압축 과 압축 풀기 ZIP 파일 을 실현 하 는 방법 을 설명 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
때때로 우 리 는 Python 에서 zip 파일 을 사용 해 야 하 는데,1.6 버 전에 서 Python 은 이미 zip file 모듈 을 제공 하여 이러한 조작 을 할 수 있 습 니 다.그러나 Python 의 zipfile 모듈 은 여러 볼 륨 을 처리 할 수 없 는 경우 가 많 지 않 기 때문에 일반적인 상황 에서 충분히 사용 할 수 있 습 니 다.다음은 기본 적 인 zipfile 작업 에 대해 기록 을 했 을 뿐 대부분의 상황 에 대처 할 수 있 습 니 다.
zipfile 모듈 은 zip 파일 을 열거 나 쓸 수 있 습 니 다.예 를 들 면:

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

이렇게 해서 zip 파일 을 열 었 습 니 다.mode 가'w'또는'a'라면 zip 파일 을 쓰 겠 다 는 뜻 입 니 다.기록 이 라면 세 번 째 인 자 를 따라 갈 수 있 습 니 다.
compression=zipfile.ZIP_DEFLATED 또는 compression=zipfile.ZIPSTORED ZIP_DEFLATED 는 압축 표지 입 니 다.사용 하려 면 zlib 모듈 을 컴 파일 해 야 합 니 다.그 다음 하 나 는 zip 로 포장 할 뿐 압축 되 지 않 습 니 다.
zip 파일 을 열 면 필요 에 따라 zip 파일 의 내용 을 읽 을 수 있 습 니까?아니면 내용 을 zip 파일 에 저장 할 수 있 습 니까?
zip 내용 읽 기
간단 합 니 다.zipfile 대상 은 read(name)방법 을 제공 합 니 다.name 은 zip 파일 의 파일 입구 입 니 다.실행 이 완료 되면 읽 은 내용 을 되 돌려 줍 니 다.생각 나 는 파일 에 저장 하면 됩 니 다.
zip 파일 쓰기
두 가지 방법 이 있 습 니 다.하 나 는 이미 존재 하 는 파일 을 직접 쓰 는 것 이 고,다른 하 나 는 문자열 을 쓰 는 것 입 니 다.
첫 번 째 zipfile 대상 을 사용 하 는 write(filename,arcname,copresstype),뒤의 두 매개 변 수 는 무시 할 수 있 습 니 다.첫 번 째 매개 변 수 는 파일 이름 이 고,두 번 째 매개 변 수 는 zip 파일 에 있 는 이름 을 표시 하 며,제시 되 지 않 으 면 filename 과 같은 이름 을 사용 하 는 것 을 표시 합 니 다.compress_type 은 압축 표지 입 니 다.zipfile 을 만 들 때의 인 자 를 덮어 쓸 수 있 습 니 다.두 번 째 는 zipfile 대상 을 사용 하 는 writestr(zinfoor_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 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기