网络编程
位置:首页>> 网络编程>> Python编程>> Python 标准库zipfile将文件夹加入压缩包的操作方法

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

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

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com