python zipfile_Python zipfile模块学习
import zipfile
import os
from zipfile import ZipFile
class ZipManage(ZipFile):
def check(self, Name):
# 检查 文件指针是否有效
if self.fp == '':
raise RuntimeError('ZIP archive is closed')
# 检查 文件是否用 append 模式打开
if self.mode != 'a':
raise RuntimeError('ZIP archive Requires appended("a") mode to open')
# 检查 文件或文件夹 是否在zip中
is_existed = False
for FileName in self.filelist:
if FileName.filename.startswith(Name):
is_existed = True;
break;
if is_existed == False:
raise RuntimeError('ZIP archive not found ', Name)
# 删除zip包中的文件
def remove(self, szFileName):
self.check(szFileName)
# 获取 要删除文件在zip中的信息
fileinfo = self.getinfo(szFileName)
print(type(fileinfo))
headerOffSet = fileinfo.header_offset
fileBlockLen = len(fileinfo.FileHeader()) + fileinfo.compress_size
# 根据要删除的文件信息, 更新zip包中其他文件的头部偏移值
for info in self.infolist():
if info.header_offset >= (headerOffSet + fileBlockLen):
info.header_offset -= fileBlockLen
# 将文件指针移动到 待删除文件的末尾
self.fp.seek(headerOffSet + fileBlockLen)
# 读取 zip中 待删除文件后 的全部数据
data = self.fp.read()
# 移动文件指针到 待删除文件的开始
self.fp.seek(headerOffSet)
# 覆写数据
self.fp.write(data)
# 截断文件
self.fp.truncate()
# 更新 zip 中的文件索引信息
self._didModify = True
self.filelist.remove(fileinfo)
del self.NameToInfo[fileinfo.filename]
# 删除 zip 中文件夹
def remove_dir(self, szDirName):
self.check(szDirName)
# 获取 要删除文件夹在zip中的信息
dirInfo = self.getinfo(szDirName)
# 获取 头部信息 和 文件块的大小
headerOffSet = dirInfo.header_offset
fileBlockLen = 0
for file in self.infolist():
if file.filename.startswith(szDirName):
fileBlockLen += (len(file.FileHeader()) + file.compress_size)
for file_head_info in self.infolist():
if file_head_info.header_offset >= (headerOffSet + fileBlockLen):
file_head_info.header_offset -= fileBlockLen
# 将文件指针移动到 待删除文件的末尾
self.fp.seek(headerOffSet + fileBlockLen)
# 读取 zip中 待删除文件后 的全部数据
latedata = self.fp.read()
# 移动文件指针到 待删除文件的开始
self.fp.seek(headerOffSet)
# 覆写数据
self.fp.write(latedata)
# 截断文件
self.fp.truncate()
# 更新 zip 中的文件索引信息
self._didModify = True
# 反向迭代删除
for i in range(len(self.infolist())-1, -1, -1):
info = self.infolist()[i]
if info.filename.startswith(szDirName):
self.filelist.remove(info)
del self.NameToInfo[info.filename]
# 替换 zip 文件中的信息
def replace(self, szReplaceFilename, szNewFilePath):
self.check(szReplaceFilename)
if not os.path.exists(szNewFilePath):
print(szNewFilePath,' is not existed')
return;
fileinfo = self.getinfo(szReplaceFilename)
self.remove(szReplaceFilename)
self.write(szNewFilePath,fileinfo.filename,fileinfo.compress_type)
def test_remove():
file = ZipManage('/home/s/Desktop/1.zip', 'a')
file.remove('1/1/2/22/test.txt')
def test_remove_dir():
file = ZipManage('/home/s/Desktop/1.zip', 'a')
file.remove_dir('1/1/2/22/')
def test_replace():
file = ZipManage('/home/s/Desktop/1.zip', 'a')
file.replace('1/1/test.txt', '/home/s/Desktop/test.txt')
python zipfile_Python zipfile模块学习相关推荐
- python zipfile_python zipfile模块学习笔记(一)
ZIP文件格式是一种常见的存档和压缩标准,这个zipfile模块提供了工具来创建.读取.写入.附加和列出一个ZIP文件.使用ZIP64扩展(即压缩文件大小超过4G),它能解压加密的ZIP文件,解密过程 ...
- python zipfile_python zipfile模块
从简单的角度来看的话,zip格式会是个不错的选择,而且python对zip格式的支持够简单,够好用. 1)简单应用 如果你仅仅是希望用python来做压缩和解压缩,那么就不用去翻文档了,这里提供一个简 ...
- 使用python的zipfile模块巧解word批量生成问题
使用python的zipfile模块巧解word批量生成问题 任务需求 任务拆解 任务方案 方案一:使用python-docx.Document读取word文档 方案二:zipfile巧解word文档 ...
- python中confIgparser模块学习
python中configparser模块学习 ConfigParser模块在python中用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(section ...
- python之wxpython模块学习
python之wxpython模块学习 wxPython简介 创建一个GUI程序 wxPython简介 wxPython 是一个用于 wxWidgets (用C ++编写)的Python包装器,这是一 ...
- python zipfile模块学习笔记(一)
ZIP文件格式是一种常见的存档和压缩标准,这个zipfile模块提供了工具来创建.读取.写入.附加和列出一个ZIP文件.使用ZIP64扩展(即压缩文件大小超过4G),它能解压加密的ZIP文件,解密过程 ...
- python zipfile_python zipfile - 刘江的python教程
zipfile 阅读: 12164 评论:0 ZIP是通用的归档和压缩格式.zipfile模块提供了通用的创建.读取.写入.附加和显示压缩文件的方法,你可以简单地把它理解为Python中的zip解压缩 ...
- 【正则表达式】正则表达式及python的re模块学习
以前经常听正则表达式,但自己从来没用过,这次刚好需要,就学习一下. 参考链接: https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb ...
- Python网络协议模块学习之smtplib
功能:smtplib模块是通过邮件服务器发送电子邮件,是smtp客户端的实现,支持邮件格式有:文本.HTML.Image.EXCEL等. 1.普通文本邮件 1 2 3 4 5 6 7 8 9 10 1 ...
最新文章
- 常用排序算法 - 稳定性和复杂度分析
- 模拟调频信号FM解调的matlab和C语言实现
- 误删了计算机桌面回收站,我电脑回收站里的东西已经被删除几天了?怎么可以找回!谢谢...
- jq之无callback,有 alert hide
- kohana的modules集合
- spss回归分析_SPSS之回归分析
- wpe手机中文汉化版下载_wpe中文版
- pnp型三极管 饱和 截至_截至2013年核心Java帖子
- 从留言板开始做网站(三)——CSS样式代码
- 如何自制圆环_PPT中如何制作环形图高级教程
- html添加启动项,windows boot manager启动项是什么
- c语言中中不同类型数据间的混合运算
- Java游戏项目之黄金矿工
- 华为云服务器linux部署项目简单步骤小结(超级详细)
- C++后端开发学习路线及推荐学习时间
- [UOJ#454][UER#8]打雪仗
- 调用科大讯飞语音合成离线SDK的基础上调用pyqt5模块编写gui界面
- uni-app使用Hbuilder X如何安卓APP打包、发布、运行
- java计算机毕业设计springboot+vue学生宿舍管理系统
- Linux下修改Oracle字符集为ZHS16GBK
热门文章
- 苹果手机html5摇一摇游戏戏码,HTML5摇一摇(下)—如何实现签筒摇动动画
- C++中单例模式的总结——operater new private construct
- linux下端口镜像,Linux如何实现镜像端口
- Windows azure Web 应用程序代理服务器—ADFS的extranet访问权限
- 天创速盈:如何提高拼多多的活动价格?
- rust编程:let和mut的变量和可变性
- TCP/IP 协议族 And HTTP 协议 基基基础知识
- signature=53e00ec565523fa0cea26fd5d380afdd, Geochemistry and Nd isotopes of the François La...
- 数据库题目 - 查找重复的电子邮箱
- 微信小程序 解析XML中缺失函数的判断