ææ¶æ们éè¦å¨ Python ä¸ä½¿ç¨ zip æ件ï¼èå¨1.6çä¸ï¼Python 就已ç»æä¾äº zipfile 模åå¯ä»¥è¿è¡è¿æ ·çæä½ãä¸è¿ Python ä¸ç zipfile 模åä¸è½å¤çå¤å·çæ
åµï¼ä¸è¿è¿ç§æ
åµå¹¶ä¸å¤è§ï¼å æ¤å¨é常æ
åµä¸å·²ç»è¶³å¤ä½¿ç¨äºãä¸é¢æåªæ¯å¯¹ä¸äºåºæ¬ç zipfile æä½è¿è¡äºè®°å½ï¼è¶³ä»¥åºä»å¤§é¨åçæ
åµäºã
zipfile 模åå¯ä»¥è®©ä½ æå¼æåå
¥ä¸ä¸ª zip æ件ãæ¯å¦ï¼
import zipfile
z = zipfile.ZipFile('zipfilename', mode='r')
è¿æ ·å°±æå¼äºä¸ä¸ª zip æ件ï¼å¦æmode为'w'æ'a'å表示è¦åå
¥ä¸ä¸ª zip æ件ãå¦ææ¯åå
¥ï¼åè¿å¯ä»¥è·ä¸ç¬¬ä¸ä¸ªåæ°ï¼
compression=zipfile.ZIP_DEFLATED æ
compression=zipfile.ZIP_STORED ZIP_DEFLATEDæ¯å缩æ å¿ï¼å¦æ使ç¨å®éè¦ç¼è¯äºzlib模åãèåä¸ä¸ªåªæ¯ç¨zipè¿è¡æå
ï¼å¹¶ä¸å缩ã
å¨æå¼äºzipæ件ä¹åå°±å¯ä»¥æ ¹æ®éè¦æ¯è¯»åºzipæ件çå
容è¿æ¯å°å
容ä¿åå° zip æ件ä¸ã
读åºzipä¸çå
容
å¾ç®åï¼zipfile 对象æä¾äºä¸ä¸ªread(name)çæ¹æ³ãname为 zipæ件ä¸çä¸ä¸ªæ件å
¥å£ï¼æ§è¡å®æä¹åï¼å°è¿å读åºçå
容ï¼ä½ æå®ä¿åå°æ³å°çæ件ä¸å³å¯ã
åå
¥zipæ件
æ两ç§æ¹å¼ï¼ä¸ç§æ¯ç´æ¥åå
¥ä¸ä¸ªå·²ç»åå¨çæ件ï¼å¦ä¸ç§æ¯åå
¥ä¸ä¸ªå符串ã
对 äºç¬¬ä¸ç§ä½¿ç¨ zipfile 对象ç write(filename, arcname, compress_type)ï¼å两个åæ°æ¯å¯ä»¥å¿½ç¥çã第ä¸ä¸ªåæ°æ¯æ件åï¼ç¬¬äºä¸ªåæ°æ¯è¡¨ç¤ºå¨ zip æ件ä¸çååï¼å¦æ没æç»åºï¼è¡¨ç¤ºä½¿ç¨ä¸filenameä¸æ ·çååãcompress_typeæ¯å缩æ å¿ï¼å®å¯ä»¥è¦çå建 zipfile æ¶çåæ°ã第äºç§æ¯ä½¿ç¨ 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()
温馨提示:答案为网友推荐,仅供参考