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压缩,这样一两次还行,但遇到项目板块测试和临时加急功能测试的时候,一天可能 ...
随机推荐
- vue如何给它的data值赋值
activeDisplay的值如何改变 用$set();方法 vm.$set('b', 2) 或者 Vue.set(data, 'c', 3) this.someObject = Object.ass ...
- NetworkX-simple graph
import networkx as nx import matplotlib.pyplot import scipy.io as sio import numpy as np load_path=' ...
- 修改maven打包名字
仅需在pom.xml添加下列配置 build> <finalName>userapi</finalName> </build>
- tinymce原装插件源码分析(六)-preview
priview 此插件文件结构比较简单,按钮注册.editor.windowManager.open.窗口出现之前的渲染数据的准备.页面代码的准备. 注意: 1.preview的默认宽高设置: 2.c ...
- BZOJ 2938 [POI2000]病毒 (剪枝/A*迭代搜索)
LOJ BZOJ 题目大意:给你一些模式串,问是否存在一个无限长的文本串,不包含任何一个给定的模式串 并没有想到去模拟合法的文本串在模式串的Trie图上匹配的过程..我好菜啊 如果一个字符串合法,那么 ...
- React 中组件间通信的几种方式
在使用 React 的过程中,不可避免的需要组件间进行消息传递(通信),组件间通信大体有下面几种情况: 父组件向子组件通信 子组件向父组件通信 非嵌套组件间通信 跨级组件之间通信 1.父组件向子组件通 ...
- 原创全新打包工具Parcel零配置VueJS开发脚手架
parcel-vue 一个基于Parcel打包工具的 VueJS急速开发脚手架解决方案,强烈建议使用node8.0以上 项目地址: https://github.com/w3c-king/p... 初 ...
- maven手动增加jar文件
maven手动增加jar文件 在cmd界面输入: mvn install:install-file -Dfile=D:\com.ibm.mq.jar -DgroupId=com.ibm.mq -Dar ...
- Android 之 Eclipse没法生成R文件
这几天被Eclipse整哭了.也怪自己手贱把appcompat_v7给删了. Eclipse创建project假设是兼容4.0下面,会多生成一个projectappcompat_v7,例如以下图: 这 ...
- C语言之基本算法38—格式化输出10000以内的全部完数
//穷举法! /* ================================================================== 题目:求10000以内的全部完数,统计数量并以 ...