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 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.