zoukankan      html  css  js  c++  java
  • Python组织文件 实践:将文件的不同版本备份为ZIP文件

    功能:备份文件夹、能将文件的不同版本备份下来,并且每个有不同的名字

    #! python3
    # backupToZip.py - 备份文件的不同版本到压缩文件中
    
    import zipfile,os
    
    #folder-指定需要备份的文件夹
    def backupToZip(folder):
        #获得绝对路径,以后就使用这样的方式来进行使用地址,不去上来就让path=‘绝对地址’了
        folder=os.path.abspath(folder)
        #figure out the filename this code should based on what files already exist
        number=1
        while True:
            zipFilename=os.path.basename(folder)+'_'+str(number)+'.zip'
            if not os.path.exists(zipFilename): #判断文件名是否存在
                break
            number+=1
        #create the ZIP file.
        print('Create %s...' %(zipFilename))
        backupZip=zipfile.ZipFile(zipFilename,'w')
        #遍历目录树并添加到ZIP文件
        for foldername,subfolders,filenames in os.walk(folder):
            print('Adding files in %s...' %(foldername))
            #添加当前文件夹到ZIP文件
            backupZip.write(foldername)
        #添加所有文件到ZIP文件中
            for filename in filenames:
                newBase=os.path.basename(folder)+'_'
                #不备份zip文件
                if filename.startswith(newBase) and filename.endswith('.zip'):
                    continue
                backupZip.write(os.path.join(foldername,filename))
        backupZip.close()
        print('Done')
    path=r'.forTestadb_backup'
    path=os.path.join(path)
    backupToZip(path)
    

      

    step1:弄清楚ZIP文件的文件名

      会按照文件的不同版本来创建名为backupFilename1、backupFilename2...这样的规律递增下去,怎么确定应该创建的zip文件的名字呢?通过检查某个文件名是否存在,如果存在,就按命名规律的下一个文件再检查。。。

    #检查文件名是否存在
        number=1
        while True:
            zipFilename=os.path.basename(folder)+'_'+str(number)+'.zip'
            if not os.path.exists(zipFilename): #判断文件名是否存在
                break
            number+=1

    step2:创建压缩文件

    print('Create %s...' %(zipFilename))
    backupZIp=zipfile.ZipFile(zipFilename,'w')

    step3:遍历目录树并添加到ZIP文件 

     #遍历目录树并添加到ZIP文件
        for foldername,subfolders,filenames in os.walk(folder):
            print('Adding files in %s...' %(foldername))
            #添加当前文件夹到ZIP文件
            backupZip.write(foldername)
        #添加所有文件到ZIP文件中
            for filename in filenames:
                newBase=os.path.basename(folder)+'_'
                #不备份zip文件
                if filename.startswith(newBase) and filename.endswith('.zip'):
                    continue
                backupZip.write(os.path.join(foldername,filename))
    

    发现的问题:

      1)

    backupZip.write(path)  #假如path是一个文件夹,那么在压缩文件中,只会出现这个文件夹,而里面的内容,并不会被压缩进去
    

      

      2)压缩文件中包含很多层文件夹,会把要压缩的文件夹的路径又创建一次(未解决)

        我以为是 foldrname 的原因,因为 foldername 是 os.walk() 返回的当前文件夹的字符串,然后就随便把 foldername 改了一下,运行提示

    FileNotFoundError: [WinError 3] 系统找不到指定的路径
    

      

      3)这个传入的路径到快把我搞晕了,我为了谨慎起见,一直都是用的绝对路径,每次搞很长一个字符串,虽然没有出现过问题,但分析程序运行结果的时候很是影响,我也不知道相路径用上会不会出错的,要赶紧试一下

      4) walk() 太强大了,他能全部遍历,我中间竟然还担心这个程序有不能压缩下面的二级文件夹的缺陷

  • 相关阅读:
    Python 面向对象高级编程
    Python 继承和多态
    Python 访问限制
    学习笔记项目3-Django-管理网站
    学习笔记项目2-Django-创建数据库及应用
    学习笔记项目1-Django-创建虚拟环境和项目
    写一个 100 以内的奇数列表
    给一个字符串,转换成数字整数,若包含非法字符,返回提示,正确则反回整数值,不能使用内置函数转换
    Linux系统实现一个everything程序
    自动化测试常用脚本-等待某个元素是否显示
  • 原文地址:https://www.cnblogs.com/Gaoqiking/p/10464741.html
Copyright © 2011-2022 走看看