python zipfile 模块基础使用及demo
zipfile 模块相关接口 参考自这里
# 打印该归档文件的内容
printdir()
# 从归档文件中展开一个成员到当前工作目录,memeber必须是一个完整的文件名称或者ZipInfo对象,path可以用来指定一个不同的展开目录,pwd用于加密文件的密码
extract(memeber, path=None, pwd=None)
# 从归档文件展开所有成员到当前工作目录,path和pwd参数作用同上,memebers必须是namelist()返回的list的一个子集
extractall(path=None, members=None, pwd=None)
# 返回一个与每一个归档成员对应的ZipInfo对象的列表
infolist()
# 返回归档成员名称列表
namelist()
# 返回一个包含压缩成员name相关信息的ZipInfo对象,如果name没有被包含在该压缩文档中将会引发KeyError
getinfo(name)
# 将归档文件中的一个成员作为一个file-like对象展开;name是归档文件中的文件名或者一个ZipInfo对象
open(name, mode='r', pwd=None)
# 关闭该压缩文件;退出程序前必须调用close()方法,否则一些必要记录不会被写入
close()
# 设置pwd作为展开加密文件的默认密码
setpassword(pwd)
# 读取归档文件中所有文件并检查它们的完整性,返回第一个被损坏的文件名称,或者None。对已关闭的ZipFile调用testzip()将会引发RuntimeError
testzip()
# 返回归档文件中name所指定的成员文件的字节。name是归档文件中的文件名称或一个ZipInfo对象。该归档文件必须以读(r)或追加(a)的模式打开。如果设置了pwd参数,则其将会覆盖setpassword(pwd)方法设置的默认密码。对一个已经关闭的ZipFile调用read()方法将会引发RuntimeError
read(name, pwd=Noneds)
# 将filename文件写入归档文件,可以通过arcname指定新文件名(需要注意的是文件名中磁盘盘符和开头的路径分隔符都会被移除);compress_type表示压缩方法,如果指定了该参数则会覆盖ZipFile构造方法中的compression参数指定的值;要调用此方法,归档文件必须以'w', 'a'或'x'模式打开,如果对以'r'模式打开的ZipFile调用write()方法或者对已关闭的ZipFile调用write()方法将会引发RuntimeError
write(filename, arcname=None, compress_type=None)
# 将一个字节串写入归档文件;zinfo_or_arcname可以是归档文件中的文件名称,也可以是一个ZipInfo实例
writestr(zinfo_or_arcname, bytes[, compress_type])
压缩zip 新手通常会有一个不太好处理的问题 就是 新手很容易 把完整的路径名写入进去
我这里是一个 指定文件夹下 部分文件 压缩以及解压缩到指定目录Demo
#!/usr/bin/env python
#-*- coding: utf8 -*-
import os
import zipfile
import shutil
RECOVERY_SOMEFILES = [
"app",
"app_adjust",
"app_appsflyer"
]
MODLE_ZIP_FNAME = "android_modle1.zip"
IGNORE_FILENAMES = [".DS_Store", ".gitignore"]
def buildModelZip(recovery_some=False):
...
filelist = RECOVERY_SOMEFILES
zipf = zipfile.ZipFile(dest_path, "w")
try:
for x in xrange(0,len(filelist)):
tar_f = os.path.join(ROOT_PATH, filelist[x])
if os.path.isdir(tar_f):
for tpath, folders, files in os.walk(tar_f):
for filename in files: # 遍历某一层级文件夹内所有文件
if filename not in IGNORE_FILENAMES:
new_path = tpath.replace(ROOT_PATH+os.path.sep, '')
zipf.write(os.path.join(tpath, filename), os.path.join(new_path, filename)) # 向压缩文件内添加文件
pass
pass
if os.path.isfile(tar_f):
new_path = tar_f.replace(ROOT_PATH+os.path.sep, '')
print(new_path)
zipf.write(new_path, compress_type=zipfile.ZIP_DEFLATED)
pass
pass
except Exception as e:
print e
raise
finally:
zipf.close()
pass
def extractFiles(recovery_some=False):
...
filelist = RECOVERY_SOMEFILES
zipf = zipfile.ZipFile(zip_path, "r")
try:
if recovery_some:
namelist = zipf.namelist()
for x in xrange(0,len(namelist)):
for y in xrange(0,len(filelist)):
if (namelist[x].startswith(filelist[y])):
zipf.extract(member=namelist[x], path=dest_path)
pass
else:
zipf.extractall(path=dest_path)
except Exception as e:
raise
else:
pass
finally:
zipf.close()
pass
if __name__ == "__main__":
recovery_some = True
buildModelZip(recovery_some)
extractFiles(recovery_some)
pass
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2019-04-15 LeetCode (Two Sum & Add Two nums)