【Python】利用zipfile.ZipFile和write()创建压缩包

问题描述

文件目录如下,源代码写在test.py中,我想把同路径下的tree1的文件夹整个压缩。

【Python】利用zipfile.ZipFile和write()创建压缩包_第1张图片

解决代码

import zipfile
import os

# 新建zip对象,后面用write()方法添加文件到这个压缩包中
newZip = zipfile.ZipFile('example.zip','w')

# os.walk()用于遍历当前的文件夹(./tree1)
# folderName, subFolders,fileNames分别为文件夹字符串、文件夹下的子文件夹字符串 列表、文件夹下的文件字符串 列表
for folderName, subFolders,fileNames in os.walk('./tree1'):
    for filename in fileNames:
        print(os.path.join(folderName, filename))
        # write()用于将文件添加到ZIP文件中
        # compress_type=zipfile.ZIP_DEFLATED:指定了 deflate 压缩算法,它对各种类型的数据都很有效
        # 当然,如果你只想压缩其中的py文件,或者不压缩md文件,只需要对filename进行判定,就可以选择性放入压缩包
        newZip.write(os.path.join(folderName,filename),compress_type=zipfile.ZIP_DEFLATED)
        
newZip.close()

看看os.path.join()结果:

# print 结果
./tree1/1.txt
./tree1/tree2/3.txt
./tree1/tree2/2.txt
./tree1/tree3/4.py

最后生成一个example.zip的压缩包,里面的文件如下:
(名字为tree1 2是因为原路径下已存在tree1文件夹)

【Python】利用zipfile.ZipFile和write()创建压缩包_第2张图片

关于有选择性压缩,这里给出一个参考代码,使用fnmatch模块。

import os,fnmatch
path = os.getcwd() # 获取当前代码文件所在目录
for foldname, subfolders,filenames in os.walk(path):
    for filename in filenames:
    	# 找出目标文件夹里所有结尾带数字的文件
        if fnmatch.fnmatch(filename,'*[0-9].*'):
            print(filename)

参考文献

  1. https://github.com/datawhalechina/team-learning-program/tree/master/OfficeAutomation

你可能感兴趣的:(Python,python,自动化)