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
投稿

猜你喜欢

  • Go语言map元素的删除和清空

    2024-02-05 10:42:25
  • 个人网站与动网整合非官方方法

    2009-07-05 18:42:00
  • Python内建类型bytes深入理解

    2022-11-13 08:35:54
  • Python assert关键字原理及实例解析

    2022-11-12 09:24:10
  • sql中的常用的字符串处理函数大全

    2024-01-19 21:37:41
  • Python 玩转图像格式转换操作

    2022-03-25 23:14:52
  • Python 操作Excel-openpyxl模块用法实例

    2021-01-20 09:29:34
  • Python中Scrapy+adbapi提高数据库写入效率实现

    2024-01-13 14:44:36
  • python函数默认参数使用避坑指南

    2023-06-19 13:37:50
  • Python如何求取逆序数

    2022-07-16 07:16:57
  • 详解Django解决ajax跨域访问问题

    2021-10-14 15:34:10
  • 使用Python绘制空气质量日历图

    2023-06-20 12:19:21
  • PHP中最低级别的错误类型总结

    2023-09-04 16:46:17
  • jupyter notebook运行代码没反应且in[ ]没有*

    2022-03-06 17:37:39
  • Python列表生成式与生成器操作示例

    2023-08-05 14:16:45
  • MySQL的之表结构修改

    2012-01-05 19:16:17
  • c#数据库与TXT导入导出的实例

    2024-01-24 06:34:16
  • SQL SERVER 2005中的同步复制技术

    2009-01-05 13:44:00
  • 详解python列表生成式和列表生成式器区别

    2021-09-13 16:15:14
  • django使用channels实现通信的示例

    2023-12-18 01:06:59
  • asp之家 网络编程 m.aspxhome.com