Python 标准库zipfile将文件夹加入压缩包的操作方法
作者:Likianta Me 时间:2021-09-17 14:06:10
zipfile模块是python中一个处理压缩文件的模块,解决了不少我们平常需要处理压缩文件的需求。大家还知道Python zipfile 库可用于压缩/解压 zip 文件. 本文介绍一下如何创建压缩包.
将 “文件” 加入压缩包
假设目录结构如下:
my_project
|- 唐诗三百首.txt # 这是要打包的文件
|- demo.py # 演示代码会在这里编写
|- _______ # 我们想要在这里生成一个名为 "output.zip" 的文件
“demo.py” 内容如下:
from zipfile import ZipFile
handle = ZipFile('output.zip', 'w')
handle.write('唐诗三百首.txt')
handle.close()
将 “文件夹” 加入压缩包
ZipFile 支持两种路径写入方式:
绝对路径
handle = ZipFile('output.zip', 'w')
handle.write('c:/aaa/bbb/唐诗三百首.txt')
handle.close()
会生成:
~/output.zip
|= aaa
|= bbb
|- 唐诗三百首.txt
相对路径
"""
假设目录结构为:
my_project
|= aaa
|= bbb
|= 唐宋诗词 # 我们想打包这个文件夹
|- 唐诗三百首.txt
|- 宋词三百首.txt
|- demo.py
|- _______ # 在这里生成 'output.zip' 文件
"""
# demo.py
import os
from zipfile import ZipFile
with ZipFile('output.zip', 'w') as handle:
# 首先切到 "唐宋诗词" 的父目录
os.chdir('./aaa/bbb')
# 然后使用相对路径写入
# 注意参数必须是文件的路径, 不能是文件夹路径
# # handle.write('唐宋诗词') # wrong!
handle.write('唐宋诗词/唐诗三百首.txt') # right
handle.write('唐宋诗词/宋词三百首.txt') # right
脚本封装
下面是封装好的脚本, 函数比较直观, 看代码就可以理解用法了:
import os
from zipfile import ZipFile
from lk_utils import findall_files # pip install lk-utils
def pack_file(file_i: str, file_o: str) -> str:
return pack_files([file_i], file_o)
def pack_files(files_i: list, file_o: str) -> str:
backup = os.getcwd()
with ZipFile(os.path.abspath(file_o), 'w') as handle:
for file_i in map(os.path.abspath, files_i):
dir_, filename = os.path.split(file_i)
os.chdir(dir_)
handle.write(filename)
# restore
os.chdir(backup)
return file_o
def pack_dir(dir_i: str, file_o: str) -> str:
return pack_dirs([dir_i], file_o)
def pack_dirs(dirs_i: list, file_o: str) -> str:
backup = os.getcwd()
with ZipFile(os.path.abspath(file_o), 'w') as handle:
for dir_i in map(os.path.abspath, dirs_i):
dir_ii = os.path.dirname(dir_i)
os.chdir(dir_ii)
for file in findall_files(dir_i):
handle.write(os.path.relpath(file, dir_ii))
# restore
os.chdir(backup)
return file_o
if __name__ == '__main__':
pack_file('aaa/bbb/唐宋诗词/唐诗三百首.txt', 'output1.zip')
pack_dir('aaa/bbb/唐宋诗词', 'output2.zip')
来源:https://blog.csdn.net/Likianta/article/details/120259467
标签:Python,zipfile,压缩包
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
python实现的config文件读写功能示例
2021-10-11 07:28:04
Python中shapefile转换geojson的示例
2023-08-03 19:05:04
间歇向上无缝翻滚代码
2008-05-05 12:30:00
PHP使用自定义key实现对数据加密解密的方法
2023-08-21 12:48:37
golang逐行读取文件的操作
2023-07-10 14:39:56
ASP的数据命名有什么规则吗?
2009-10-28 18:23:00
python套接字流重定向实例汇总
2022-04-15 07:53:41
SQL Server如何实现快速删除重复记录?
2011-05-03 11:18:00
asp解决fso.ReadAll提示输入超出了文件尾的错误
2008-01-30 21:40:00
JavaScript实现多层颜色选项卡嵌套
2023-09-18 04:42:28
![](https://img.aspxhome.com/file/2023/3/56323_0s.gif)
Request.Servervariables(“HTTP_USER_AGENT“)是什么意思。
2009-08-21 13:13:00
python 定时器,轮询定时器的实例
2023-07-08 04:26:57
Python使用 Beanstalkd 做异步任务处理的方法
2021-01-06 18:18:19
![](https://img.aspxhome.com/file/2023/1/75151_0s.png)
selenium+python自动化测试之页面元素定位
2021-09-30 18:08:55
![](https://img.aspxhome.com/file/2023/0/75900_0s.png)
python中封装token问题
2022-09-29 01:09:32
基于Python编写一个ISBN查询工具
2022-02-22 09:43:21
![](https://img.aspxhome.com/file/2023/3/83773_0s.png)
python神经网络学习使用Keras进行回归运算
2023-01-30 14:08:45
![](https://img.aspxhome.com/file/2023/9/90629_0s.png)
Python3读取文件常用方法实例分析
2023-07-07 16:13:43
如何基于Python实现电子邮件的发送
2022-03-16 11:49:16
![](https://img.aspxhome.com/file/2023/3/69433_0s.png)
网页制作前台之javascript
2013-07-23 08:32:59