美文网首页python自学python初学者
忘了“winRAR压缩”这个靓仔吧~

忘了“winRAR压缩”这个靓仔吧~

作者: 求余的小屋 | 来源:发表于2019-07-12 16:57 被阅读2次
    压缩文件ing

    概述

    上次利用 python 中的 os 模块的<os.walk()>成功遍历的目录树
    昨天又学到 <zipfile> 模块来压缩文件
    那么,两者结合起来,就能实现简单的压缩、打包文件的功能了。

    程序目的

    每执行一次,新建一个压缩文件,压缩文件名如下

    • <备份目录名>_N.zip
    • 下一次执行脚本文件,数字 N+1
      备份的zip文件,放入back_up 文件夹中

    代码实现思路

    ① #TODO: 导入 zipfile, os 模块

    #!python3
    import os
    import zipfile
    

    ② #TODO: 检测 back_up 目录下,是否存在同名压缩文件,存在则生成n+1的新文件名

    number = 1
    while True:
        zipFilename = os.path.basename(folder) + '_' + str(number) + '.zip'
        if not os.path.exists(zipFilename):
            break
        number = number + 1
    

    ③ #TODO: 以 'w' 新建一个压缩文件,用 ② 的 zipFilename 命名

    with zipfile.ZipFile(zipFilename, 'w') as backZip:
    

    ④ #TODO: 接下来,遍历要压缩的目录,把每一个目录,和其下的文件都写入压缩文件

    #os.walk()遍历每一个目录下的文件
        for folderName, subfolders, filenames in os.walk(folder):
            print('当前目录下文件正在压缩 %s ...' % (folderName))
            #先添加文件夹,到备份zip压缩包中去
            backupZip.write(folderName)
            #再添加当前目录下的文件到压缩包中去
            for filename in filenames:
                backupZip.write(os.path.join(folderName, filename))
    

    ⑤ #TODO: 提示完成

    print("[!] 备份完成.")
    

    整理代码

    #!python3
    #backupToZip.py - 备份任意目录下所有文件,到 back_up 文件夹中
    
    import sys, os, time
    import zipfile
    
    
    def backupToZip(folder):
        #备份输入的目录下的所有内容
        folder = os.path.abspath(folder) #输入的路径转化为绝对路径
        number = 1
        while True:
            zipFilename = os.path.basename(folder) + '_' + str(number) + '.zip'
            if not os.path.exists(zipFilename):
                break
            number = number + 1
    
        print('建立备份文件 %s ...' % (zipFilename))
        with zipfile.ZipFile(zipFilename, 'w') as backupZip: 
            for folderName, subfolders, filenames in os.walk(folder):
                print('当前目录下文件正在压缩 %s ...' % (folderName))
                backupZip.write(folderName)
                
                for filename in filenames:
                    backupZip.write(os.path.join(folderName, filename))
        print('[!] 备份完成.')
    
    def main():
        os.mkdir(r'.\back_up')
        os.chdir(r'.\back_up')
        print('backupTozip脚本运行目录:' + str(os.getcwd()))
        # 选择要备份的文件夹,以及所在的路径
        target = r'D:\py\Auto\delicious'
        backupToZip(target)
    
    if __name__ == '__main__':
        main()
    

    总结

    • 和文件有关的操作,要记得检查路径、文件夹或文件是否存在、是否有权限(r,w,x)
      下面这段,通常用来判断
      文件不存在、没有权限等情况,执行 if 内的代码,要么报错,要么放心的去做其他的事情
    if not os的<文件夹、文件>检查方法:
        pass
    
    • 检查文件,是否以 "xxx" 名字开始,并且以某种后缀结尾
      下面这段,检查文件是否为 xxx.zip 文件
    if filename.startswith("xxx") and filename.endswith('.zip'):
        pass
    

    相关文章

      网友评论

        本文标题:忘了“winRAR压缩”这个靓仔吧~

        本文链接:https://www.haomeiwen.com/subject/ydfykctx.html