例子5:将指定文件夹备份成ZIP文件

需求:

文件夹备份成ZIP文件,不能破坏原有的文件夹结构,ZIP备份文件在同父级文件夹下,命名规则:FolderName_N.zip

分析:

1. 创建zip文件命名规则:FolderName_N.zip -》while循环

2. 创建zip文件  -》zipfile.ZipFile()

3. 遍历目录树并添加到zip文件中  -》os.wark()

难点:

步骤3中,需要对os.walk中返回的文件夹路径做特殊处理,否则写入zip文件时,会从根文件开始。(PS:解决方法是百度出来的,还未透彻理解。)

解决方法:

fpath = root.replace(folder, '')
fpath = fpath and fpath + os.sep or ''
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# backupToZip.py  -  Copies an entire folder and its contents into a ZIP file whose filename increments.

import os
import zipfile

def zip_file(baseFolder):

    folder = os.path.abspath(baseFolder)
    # print(os.path.basename(folder))

    # 按规则命名ZIP文件
    n = 1
    while True:
        zipFileName = os.path.basename(folder) + "_" + str(n) + ".zip"
        # print(zipFileName)

        # 检查backup文件编号是否已存在,不存在跳出循环,存在继续循环
        bakPath = os.path.abspath(os.path.dirname(baseFolder))
        if zipFileName not in os.listdir(bakPath):
            # print(zipFileName)
            break
        n += 1

    # 创建ZIP文件
    zipFile = zipfile.ZipFile(os.path.dirname(baseFolder) + '\\' + zipFileName, mode='w')
    # print(os.path.dirname(baseFolder) + '\\' + zipFileName)

    # 遍历文件树并添加到ZIP文件中

    for root, dirs, files in os.walk(folder):
        fpath = root.replace(folder, '')
        fpath = fpath and fpath + os.sep or ''

        for filename in files:
            zipFile.write(os.path.join(root, filename), fpath + filename, compress_type=zipfile.ZIP_DEFLATED)

    zipFile.close()

if __name__ == "__main__":
    baseFolder = "C:\\Users\cassie.yan.su\Desktop\\test\Python Files"
    zip_file(baseFolder)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值