本站首页    管理页面    写新日志    退出


«October 2025»
1234
567891011
12131415161718
19202122232425
262728293031


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7627277
建立时间:2006年5月29日




[Python]贡献一个打包备份的脚本
软件技术

lhwork 发表于 2007/2/2 15:55:05

工程文件里面,除了代码,文档外,有很多垃圾文件,比如VC project里面的ncb,obj,pch等,要想备份文件夹,还得把它们剔出,特别麻烦.这个脚本我一直都用,可以把打包不同的文件夹,包括子目录,支持自定义保存的文件类型.它会自动把备份文件压缩成zip格式 下载: pack.py from dircache import listdir from os.path import isdir,basename,isfile,join,getsize from string import split,lower from datetime import date from zipfile import ZipFile,ZIP_DEFLATED from  string import replace   class TBackup:     def __init__(self):         self.list=[[]]         self.task=[[]]         self.filter=('h','cpp','pas','sln',\         'dpr','vcproj','txt','htm','dfm',\         'xls','doc','vsd','ini','xml','dpk','bpg',\         'java','jbx','jpx','py','xsd')         self.name_str=date.today().isoformat()+'-backup.zip'         self.init_path=''         self.save_path=''       def SetSavePath(self,save):         self.save_path=save       def addTask(self,work,filter=None):         if not filter:filter=work         tmp=[]         tmp.append(work)         tmp.append(filter)         self.task.append(tmp)         def add(self,file):         p=split(basename(file),'.')         if len(p)<2:             return         exd=lower(p[1])         if exd in self.filter:             tmp=[]             tmp.append(file)             tmp.append(replace(file,self.init_path,''))             self.list.append(tmp)       def dumy(self):         print self.name_str       def run(self):         for x in self.task:             if len(x)==2:                 self.init_path=x[1]                 self.readpath(x[0])                 self.pack()       def readpath(self,path):         p=listdir(path)         for x in p:             x=join(path,x)             if isdir(x):                 self.readpath(x)             elif isfile(x):                 self.add(x)       def pack(self):         if len(self.list)==0:             print 'no file packed'             return         target= join(self.save_path,self.name_str)         zip = ZipFile(target,'w',ZIP_DEFLATED)         for p in self.list:             if len(p)==2:                 print p[0]                 zip.write(p[0],p[1])         zip.close()           print '-----------------------------------------------------------------------'         print         print "save to:",target         print "total file:" ,len(self.list)           ks = getsize(target)/1024.0         ks =float(int(ks*1000)/1000)         print '%2s kb write done!' % (ks) 说明 self.filter是一个字符串的列表,在里面定义需要备份的文件类型,只写不带分割符号的扩展名,大小写不敏感(windows平台上) 用法也很简单 from pack import TBackup b=TBackup() b.SetSavePath('F:\\work_space\\back_up')   b.addTask('F:\\work_space\\running\\tnl\', filter='F:\\work_space\\running\') #这个函数需要解释一下,两个参数, #第一个参数是需要备份的文件夹路径, #第二个参数filter,则是压缩文件里面的 #参考路径,filter='F:\\work_space\\running\\" #备份成功之后,打开压缩包,会看到这样 #的目录"".tnl",如果filter='F:\\work_space\\" #那么会看到"running\tnl"的目录 b.run()


阅读全文(1712) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.061 second(s), page refreshed 144801883 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号