工程文件里面,除了代码,文档外,有很多垃圾文件,比如VC project里面的ncb,obj,pch等,要想备份文件夹,还得把它们剔出,特别麻烦.这个脚本我一直都用,可以把打包不同的文件夹,包括子目录,支持自定义保存的文件类型.
它会自动把备份文件压缩成zip格式

下载: pack.py
  1. from dircache import listdir
  2. from os.path import isdir,basename,isfile,join,getsize
  3. from string import split,lower
  4. from datetime import date
  5. from zipfile import ZipFile,ZIP_DEFLATED
  6. from string import replace
  7. class TBackup:
  8. def __init__(self):
  9. self.list=[[]]
  10. self.task=[[]]
  11. self.filter=('h','cpp','pas','sln',\
  12. 'dpr','vcproj','txt','htm','dfm',\
  13. 'xls','doc','vsd','ini','xml','dpk','bpg',\
  14. 'java','jbx','jpx','py','xsd')
  15. self.name_str=date.today().isoformat()+'-backup.zip'
  16. self.init_path=''
  17. self.save_path=''
  18. def SetSavePath(self,save):
  19. self.save_path=save
  20. def addTask(self,work,filter=None):
  21. if not filter:filter=work
  22. tmp=[]
  23. tmp.append(work)
  24. tmp.append(filter)
  25. self.task.append(tmp)
  26. def add(self,file):
  27. p=split(basename(file),'.')
  28. if len(p)<2:
  29. return
  30. exd=lower(p[1])
  31. if exd in self.filter:
  32. tmp=[]
  33. tmp.append(file)
  34. tmp.append(replace(file,self.init_path,''))
  35. self.list.append(tmp)
  36. def dumy(self):
  37. print self.name_str
  38. def run(self):
  39. for x in self.task:
  40. if len(x)==2:
  41. self.init_path=x[1]
  42. self.readpath(x[0])
  43. self.pack()
  44. def readpath(self,path):
  45. p=listdir(path)
  46. for x in p:
  47. x=join(path,x)
  48. if isdir(x):
  49. self.readpath(x)
  50. elif isfile(x):
  51. self.add(x)
  52. def pack(self):
  53. if len(self.list)==0:
  54. print 'no file packed'
  55. return
  56. target= join(self.save_path,self.name_str)
  57. zip = ZipFile(target,'w',ZIP_DEFLATED)
  58. for p in self.list:
  59. if len(p)==2:
  60. print p[0]
  61. zip.write(p[0],p[1])
  62. zip.close()
  63. print '-----------------------------------------------------------------------'
  64. print
  65. print "save to:",target
  66. print "total file:" ,len(self.list)
  67. ks = getsize(target)/1024.0
  68. ks =float(int(ks*1000)/1000)
  69. print '%2s kb write done!' % (ks)

说明

  1. self.filter是一个字符串的列表,在里面定义需要备份的文件类型,只写不带分割符号的扩展名,大小写不敏感(windows平台上)
  2. 用法也很简单
    1. from pack import TBackup
    2. b=TBackup()
    3. b.SetSavePath('F:\\work_space\\back_up')
    4. b.addTask('F:\\work_space\\running\\tnl\', filter='F:\\work_space\\running\')
    5. #这个函数需要解释一下,两个参数,
    6. #第一个参数是需要备份的文件夹路径,
    7. #第二个参数filter,则是压缩文件里面的
    8. #参考路径,filter='F:\\work_space\\running\\"
    9. #备份成功之后,打开压缩包,会看到这样
    10. #的目录"".tnl",如果filter='F:\\work_space\\"
    11. #那么会看到"running\tnl"的目录
    12. b.run()