博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python组织文件 实践:将文件的不同版本备份为ZIP文件
阅读量:6114 次
发布时间:2019-06-21

本文共 2548 字,大约阅读时间需要 8 分钟。

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

#! 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'.\forTest\adb_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() 太强大了,他能全部遍历,我中间竟然还担心这个程序有不能压缩下面的二级文件夹的缺陷

转载于:https://www.cnblogs.com/Gaoqiking/p/10464741.html

你可能感兴趣的文章
Wait Functions
查看>>
代码描述10313 - Pay the Price
查看>>
jQuery最佳实践
查看>>
centos64i386下apache 403没有权限访问。
查看>>
vb sendmessage 详解1
查看>>
jquery用法大全
查看>>
Groonga 3.0.8 发布,全文搜索引擎
查看>>
PC-BSD 9.2 发布,基于 FreeBSD 9.2
查看>>
网卡驱动程序之框架(一)
查看>>
css斜线
查看>>
Windows phone 8 学习笔记(3) 通信
查看>>
重新想象 Windows 8 Store Apps (18) - 绘图: Shape, Path, Stroke, Brush
查看>>
Revit API找到风管穿过的墙(当前文档和链接文档)
查看>>
Scroll Depth – 衡量页面滚动的 Google 分析插件
查看>>
Windows 8.1 应用再出发 - 视图状态的更新
查看>>
自己制作交叉编译工具链
查看>>
Qt Style Sheet实践(四):行文本编辑框QLineEdit及自动补全
查看>>
[物理学与PDEs]第3章习题1 只有一个非零分量的磁场
查看>>
深入浅出NodeJS——数据通信,NET模块运行机制
查看>>
onInterceptTouchEvent和onTouchEvent调用时序
查看>>