Python 标准库zipfile将文件夹加入压缩包的操作方法
作者:Likianta Me 发布时间:2021-09-17 14:06:10
标签:Python,zipfile,压缩包
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
0
投稿
猜你喜欢
- php操作xml最近计划写个人的小网站,一系列原因选择了用php来写,最大的问题就是虽然php很流行,但我从来没有接触过php,看了一个多星
- 本文实例主要是对turtle的使用,实现Python+turtle动态绘制一棵树的实例,具体代码:# drawtree.pyfrom tur
- 本文实例讲述了php中数字、字符与对象判断函数用法。分享给大家供大家参考。具体分析如下:在php判断数字,字符,对象,数组等包括有参见 is
- 1. 背景在深度学习的任务中,通常需要比较复杂的参数以及输入输出配置,比如需要不同的训练data,不同的模型,写入不同的log文件,输出到不
- 前言:在Python里面,只要类型对象实现了__iter__,那么它的实例对象就被称为可迭代对象(Iterable),比如字符串、元组、列表
- 大家都知道索引对于数据访问的性能有非常关键的作用,都知道索引可以提高数据访问效率。为什么索引能提高数据访问性能?他会不会有“副作用”?是不是
- 链表链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址。由于每个结
- 本文实例讲述了Python3.5内置模块之time与datetime模块用法。分享给大家供大家参考,具体如下:1、模块的分类a、标准库(Py
- 就前面所讲,函数的基本内容已经完毕。但是,函数还有很多值得不断玩味的细节。这里进行阐述。参数的传递python中函数的参数通过赋值的方式来传
- 导言Bootstrap 轮播(Carousel)插件是一种灵活的响应式的向站点添加滑块的方式。除此之外,内容也是足够灵活的,可以是图像、内嵌
- <?php// 使用Memache 作为进程锁 class lock_processlock{// key 的前缀protected
- 前言前两篇我们分别爬取了糗事百科和妹子图网站,学习了 Requests, Beautiful Soup 的基本使用。不过前两篇都是从静态 H
- 最近对动易CMS有个研究任务,具体研究什么,嘿嘿,保密。网络收集了九个常见的错误原因分析及解决方法错误提示: ADODB.Recordset
- <% '************************************************
- 1.intersect为取多个查询结果的交集;2.查询两个基本时间段内表记录的SQL语句;select * from shengjibiao
- Flask 是一个 Python 实现的 Web 开发微框架。这篇文章是一个讲述如何用它实现传送视频数据流的详细教程。我敢肯定,现在你已经知
- PDOStatement::executePDOStatement::execute — 执行一条预处理语句(PHP 5 >= 5.1
- 本文实例为大家分享了Python将图片彩色转化为素描的具体代码,供大家参考,具体内容如下第一种:from PIL import Image,
- 无法导入本地安装好的第三方库一、安装第三方库1、 Anaconda安装(1)、打开“cmd”窗口(快
- 从业这几年,自己写过的和帮人参谋的所谓“设计规范”不少了,这个东西大概在中国的决策层眼里是这么回事儿 - 一帮农民在一块田里种粮食,起先天气