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

Python 标准库zipfile将文件夹加入压缩包的操作方法

脚本封装

下面是封装好的脚本, 函数比较直观, 看代码就可以理解用法了:


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')

Python 标准库zipfile将文件夹加入压缩包的操作方法

来源:https://blog.csdn.net/Likianta/article/details/120259467

标签:Python,zipfile,压缩包
0
投稿

猜你喜欢

  • 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
  • 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
  • selenium+python自动化测试之页面元素定位

    2021-09-30 18:08:55
  • python中封装token问题

    2022-09-29 01:09:32
  • 基于Python编写一个ISBN查询工具

    2022-02-22 09:43:21
  • python神经网络学习使用Keras进行回归运算

    2023-01-30 14:08:45
  • Python3读取文件常用方法实例分析

    2023-07-07 16:13:43
  • 如何基于Python实现电子邮件的发送

    2022-03-16 11:49:16
  • 网页制作前台之javascript

    2013-07-23 08:32:59
  • asp之家 网络编程 m.aspxhome.com