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压缩,这样一两次还行,但遇到项目板块测试和临时加急功能测试的时候,一天可能 ...
随机推荐
- java中class,public的用法
java中class,public的用法 一.Java访问权限饰词(access specifiers) Java有public.protect.friendly.private四种访问权限,并且这四 ...
- http扩展请求头中的x-Forwarded-For
X-Forwarded-For格式: X-Forwarded-For: client-ip, proxy1-ip, proxy2-ip 客户端请求服务器的过程中没经过一个代理层(代理中使用了xff)那 ...
- jq不懂的地方
在循环列表中,获取input标签的值,不能用id获取,用class获取值,通过父级属性找到class,this 指当前点击的位置var UID = $(this).parents("tr&q ...
- Mathab和Python的numpy中的数组维度
Matlab和Python的numpy在维度索引方面的不同点: 1.索引的起始点不同:Matlab起始位置的索引为1,Python为0. 2.索引的括号不同:Matlab中元素可以通过小括号表示索引, ...
- 使用windowbuilder的时候更方便——设置默认把控件生成为成员变量而不是局部变量
找了一大圈,最后还是上Google才找到这个方法的.以前改过了,重新设置工作目录之后设置都丢失了,却找不到改的办法,这次长个记性,记在自己博客里. 设置成成员属性的好处是随后使用这些控件的时候方便.
- Nginx域名配置文件bak
server { listen 80; server_name m.abd.com; rewrite ^(.*)$ https://$host$1 permanent; } server { list ...
- iOS开发——GCD总结
Grand Central Dispatch,简称GCD,在异步执行任务的技术之一. 一般将应用程序中记述的线程管理用的代码在系统级中实现,开发者只需要定义想执行的任务并追加到适当的Dispatch ...
- [HNOI2004]打砖块(敲砖块)
题目:codevs1257.洛谷P1437 题目大意:有一些砖块呈倒三角形状,每块砖敲掉后有一个分数.除第一行外,敲掉一块砖必须先把上面两块砖敲掉.现在你能敲m块砖,求能得到的最大分数. 解题思路:此 ...
- CF1019C Sergey's problem (图上构造)
题目大意:给你一个有向连通图,让你找出一个点集,保证点集内的点之间没有直接连边,且集合中存在一点,到一个 非点集中的点的距离小于等于2 思路很清奇 首先编号从小到大遍历每个点,如果这个点没有被访问过, ...
- Opencv 三对角线矩阵(Tridiagonal Matrix)解法之(Thomas Algorithm)
1. 简介 三对角线矩阵(Tridiagonal Matrix),结构如公式(1)所示: aixi−1+bixi+cixx+1=di(1) 其中a1=0,cn=0.写成矩阵形式如(2): ⎡⎣⎢⎢⎢⎢ ...