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


猜你喜欢
- 字符串格式化里的符号很多,本文详细的介绍一下,以便随时查找。%s :字符串的格式化,也是最常用的%d :格式化整数,也比较常用%c :格式化
- 如下所示:plt.title("Feature importances", fontsize=30)plt.xticks
- 示意图:python双向链表实现代码:#!/usr/bin/python# -*- coding: utf-8 -*-class Node(
- Update 语句Update 语句用于修改表中的数据。语法:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值P
- 前言MySQL是一个高速度、高性能、多线程、开放源代码,建立在客户/服务器(Client/Server)结构上的关系型数据库管理系(RDBM
- 一、介绍这篇文档旨在介绍如何安装配置基于2台服务器的MySQL集群。并且实现任意一台服务器出现问题或宕机时MySQL依然能够继续运行。虽然这
- 一、基本概念APScheduler全称Advanced Python Scheduler 作用为在指定的时间规则执行指定的作业。指定时间规则
- 前言本文是美团一位大佬写的,还不错拿出来和大家分享下,代码中嵌套在html中sql语句是java框架的写法,理解其sql要执行的语句即可。背
- 匹配双字节字符(包括汉字在内): [^\x00-\xff] 应用:计算字符串的长度(一个双字节字符长度计2,ASCII
- 限流是项目中经常需要使用到的一种工具,一般用于限制用户的请求的频率,也可以避免瞬间流量过大导致系统崩溃,或者稳定消息处理速率这个文章主要是使
- 如下所示:plt.rcParams['savefig.dpi'] = 300 #图片像素plt.rcParams['
- ps:大多与c等编程语言极为相似一、if分支if:给定一个条件,同时为该条件设置多种(一般两种)情况,然后通过条件判断来实现具体的执行段复合
- 我就废话不多说了,大家还是直接看代码吧!import pymysql,hashlib结果:单条结果 {'id': 1,
- 内容摘要:浏览器不兼容这个难题,一直是网页设计师们头痛的事情。ie7.0的面世,尚且不论他是否较之ie6.0进步, ie7和ie6
- 传统的HTML页面中连动下拉框采用了两种方法:1)直接将下拉框中的内容hardcode于html的javascript中,调用javascr
- python2:print语句,语句就意味着可以直接跟要打印的东西,如果后面接的是一个元组对象,直接打印python3:print函数,函数
- 1.执行计划简介执行计划是指一条 SQL 语句在经过 MySQL 查询优化器的优化会后,具体的执行方式。MySQL 为我们提供了  
- K-means(K均值)算法是最简单的一种聚类算法,它期望最小化平方误差注:为避免运行时间过长,通常设置一个最大运行轮数或最小调整幅度阈值,
- rs.open sql,conn:如果sql是delete,update,insert则会返回一个关闭的记录集,在使用过程中不要来个rs.c
- 首先,建一个文件夹,把你要隐藏的文件放在里面,你的所有黑客程序什么的。假设你建的文件夹叫hacker然后呢,我们给这个文件夹加个扩展名(后缀