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'.\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() 太强大了,他能全部遍历,我中间竟然还担心这个程序有不能压缩下面的二级文件夹的缺陷
Python组织文件 实践:将文件的不同版本备份为ZIP文件的更多相关文章
- 用DriverBackUp备份了文件 装好系统后怎么把备份的驱动文件还原
1.打开DriverBackUp 2.菜单栏选择Restore 3.选择open backup file 4.找到备份文件位置,并选择.bki后缀的文件 5.点击"打开" 6.勾选 ...
- Python实践练习:将一个文件夹备份到一个 ZIP 文件
题目 项目要求:假定你正在做一个项目,它的文件保存在 C:\AlsPythonBook 文件夹中.你担心工作会丢失, 所以希望为整个文件夹创建一个 ZIP 文件, 作为"快照" . ...
- Python小技巧:运行目录或ZIP文件
在写Python程序时,将不同功能代码写在不同文件中是一个好习惯,但是对于某些情况.如需要将脚本提供给别人运行使用,如若将程序写在几个文件中,则需要将文件都发给他人.别人就需要管理不同文件,这样对于别 ...
- 【.NET深呼吸】Zip文件操作(1):创建和读取zip文档
.net的IO操作支持对zip文件的创建.读写和更新.使用起来也比较简单,.net的一向作风,东西都准备好了,至于如何使用,请看着办. 要对zip文件进行操作,主要用到以下三个类: 1.ZipFile ...
- php zip文件内容比較类
php zip 文件比較类,比較两个zip文件的内容,返回新增,删除,及同样的文件列表.临时仅仅支持单层. 需求:上传一个zip文件,zip内有非常多图片文件.须要对图片文件进行一系列非常耗时的处理. ...
- java上传并下载以及解压zip文件有时会报文件被损坏错误分析以及解决
情景描述: 1.将本地数据备份成zip文件: 2.将备份的zip文件通过sftp上传到文件服务器: 3.将文件服务器上的zip文件下载到运行服务器: 4.将下载的zip文件解压到本地(文件大小超过50 ...
- c#使用DotNetZip封装类操作zip文件(创建/读取/更新)实例
DotnetZip是一个开源类库,支持.NET的任何语言,可很方便的创建,读取,和更新zip文件.而且还可以使用在.NETCompact Framework中. 下载地址在这里:http://dot ...
- Android 解压zip文件你知道多少?
对于Android常用的压缩格式ZIP,你了解多少? Android的有两种解压ZIP的方法,你知道吗? ZipFile和ZipInputStream的解压效率,你对比过吗? 带着以上问题,现在就开始 ...
- Vue -- webpack 项目自动打包压缩成zip文件
这段时间用 Vue2.0 开发项目,每次打包都会用到 npm run build 命令,但是每次部署时给后端发包都要手动zip压缩,这样一两次还行,但遇到项目板块测试和临时加急功能测试的时候,一天可能 ...
随机推荐
- NEON基本知识
http://blog.csdn.net/EmSoftEn/article/details/51834171 http://blog.csdn.net/yxnyxnyxnyxnyxn/article/ ...
- 为什么同样的数据,俩人生成的obj和bin文件不一样
http://bbs.csdn.net/topics/270055083 编译器编译的时候可能有些东西依赖时间,或许是优化的原因,如果可以,换个编译器试试,或许两次编译的时候,强制把系统时间调成一个看 ...
- Linux部署之批量自动安装系统之TFTP篇
1. 安装:yum install tftp-server –y 2. 配置tftp文件开启tftp功能 3. 开启依赖服务xinetd 4 ...
- SpringCloud学习笔记(16)----Spring Cloud Netflix之Hystrix Dashboard+Turbine集群监控
前言: 上一节中,我们使用Hystrix Dashboard,只能看到单个应用内的服务信息.在生产环境中,我们经常是集群状态,所以我们需要用到Turbine这一应用. 作用:汇总系统内的多个服务的数据 ...
- IPv6理论知识详解
1. IPv6地址表示 IPv6地址可以表示为128位由0.1组成的字符串,为了便于计算机理解,将128位的二进制字符串表示为32位的十六进制字符串,为了便于理解,人们将其划分为8组,组与组之间用 : ...
- linux下mysqldump简单命令导出数据库和表
进入mysql的bin目录执行: 导出单个表: mysqldump -uroot -ppassword --database dbname --tables users > /home/root ...
- layui框架下的摸索与学习
一.table表格内的查询 1.单个条件查询: 主要代码: <%-- Created by IntelliJ IDEA. User: Administrator Date: 2019/1/14 ...
- echars 在vue v-if 切换会 显示不出来或者显示出来但是不是百分百显示
我也是百度看别人写的原因,然后自己总结,以后用到的时候来复制就可以将 v-if换成 v-show 第二不是百分百显示 可以用 this.$nextTick(function() { this.in ...
- vue-cli#2.0项目结构分析
项目结构 build 构建工具相关的目录 config 配置目录 dist 通过工具打包生成的最终需要上线的目录 node_modules 存放本地开发所有的依赖包的目录 src 源码目录 stati ...
- NYIST 1019 G.亲戚来了
G.亲戚来了 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 Bob 一家人要去下馆子,为什么呢?因为他姑姑的大爷的叔叔的孙子的表叔的婶婶的儿子来了,亲戚来了当然要下 ...