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压缩,这样一两次还行,但遇到项目板块测试和临时加急功能测试的时候,一天可能 ...
随机推荐
- JS基本功 | JavaScript专题之数组 - 方法总结
Array.map() 1. map() 遍历数组 语法: let new_array = arr.map(function callback(currentValue, index, array ...
- jquery.gritter 提示
首先引入css和js文件 <link rel="stylesheet" href="<%=basePath%>assets/css/jquery.gri ...
- Rx = Observables + LINQ + Schedulers
The Reactive Extensions (Rx) is a library for composing asynchronous and event-based programs using ...
- Thread-local storage
Thread-local storage (TLS) is a computer programming method that uses static or global memory local ...
- 用SqlDataReader返回多个结果集
using System; using System.Data; using System.Data.SqlClient; namespace Northwind { class Program { ...
- chrome 获取移动端页面元素信息
一:背景在使用appium进行app端自动化测试的时候,一般使用的是uiautomatorviewer来给页面元素做定位.但如果遇到页面元素类型是webview的时候,则只能定位整个页面,而不能更进一 ...
- 微信小程序 上传图片
效果图 如上,js 如下,在页面循环图片就可以 /** * 选择图片 */ uploadImgAdd: function(e) { var imgs = this.data.imgs; wx.ch ...
- hadoop-01-ssh无密登录配置
1,分配master机器2台,slave机器5台: 2,在全部机器上面配置/etc/hosts设置 3,全部机器上面进行ntp设置:TODO 4,在master机器上面: 不要用root登录 1) s ...
- 4.有关日期格式属性改动常识,v$nls_parameters,between and,查询指定部门的员工信息,in和null,like模糊查询,order by后面能够跟:列名、表达式、别名、序号
1 有关日期格式属性改动常识 NLS_DATE_FORMAT DD-MON-RR select sysdate from dual; NLS_CURRENCY ...
- vim-YCM插件安装
这两天开始使用vim来学习C++语言,中间少不了要进行编译.才刚刚写了两个小例子就开始发现,每次都要退出vim来进行编译,实在太麻烦了.这时候才想到之前有在一本关于vim的书籍上看到quickfix的 ...