Python 实例: 备份文件

都说生命苦短,我用python, 所以这两天我也开始学python了.

昨天搞了下语法,今天搞出来个实例,备份文件.尽管编码相当烂,但是测试了一下,还真能用.

它读取一个任务文件, 根据指定的任务参数自动备份.

任务文件的格式: (注意,分号后面注释是不支持的)

[vb] view plaincopy

  1. [task]  ; 一项任务开始
  2. dir=h:/Project  ; 指定备份的目录
  3. recusive=1      ; 是否递归子目录
  4. suffix=h|cpp|hpp|c|user|filters|vcxproj|sln|css|gif|html|bmp|png|lib|dsw|dsp|htm|html|ico|ini|jpg|rc|vssscc ; 指定备份的扩展名
  5. exclude=0   ; 指定是备份上面的参数指定的扩展名还是排除指定的扩展名
  6. zip=Project.zip ; 备份后的文件路径名

这是python代码:

[python] view plaincopy

  1. # -*- coding: utf-8 -*-
  2. import sys
  3. import os
  4. import zipfile
  5. class Task:
  6. #dir str directory
  7. #bsub BOOL include subdirectory
  8. #sfx str postsuffix ,sepeated by ‘|‘
  9. #ecld BOOL include or execlude the postsuffix sfx
  10. def __init__(self,dir,bsub,sfx,ecld,zip):
  11. self.dir = dir
  12. self.bsub = bsub
  13. self.suffix = sfx.split("|")
  14. self.exclude = ecld
  15. self.zip = zip
  16. @staticmethod
  17. def isfilter(sfx,sfxs,bexcld):
  18. bFound = False
  19. for e in sfxs:
  20. if e == sfx:
  21. bFound = True
  22. break
  23. if bexcld:
  24. return not bFound;
  25. else:
  26. return bFound;
  27. class QBackup:
  28. ‘‘‘‘‘备份指定目录下具备指定扩展名的文件‘‘‘
  29. def __init__(self):
  30. self._list = []
  31. def __del__(self):
  32. pass
  33. #tfile 任务文件
  34. def ReadTask(self,tfile):
  35. dir = ""
  36. bsub = False
  37. sfx = ""
  38. becld = False
  39. zip = ""
  40. try:
  41. f = open(tfile,‘r‘)
  42. while True:
  43. line = f.readline()
  44. if len(line) == 0:
  45. break;
  46. line = line.strip(" ")
  47. if "[Task]/n".lower() == line.lower():
  48. # 读取接下来的4行
  49. iline = 1
  50. while iline <= 5:
  51. line = f.readline()
  52. line = line.strip(" /t/n")  # 去除前后的空白符
  53. idx = line.find("=")
  54. if -1 == idx:
  55. break;
  56. atti = line[0:idx]
  57. value = line[idx+1:]
  58. print(value)
  59. if "dir" == atti:
  60. dir = value
  61. elif "recusive" == atti:
  62. bsub = bool(int(value))
  63. elif "suffix" == atti:
  64. sufix = value
  65. elif "exclude" == atti:
  66. becld = bool(int(value))
  67. elif "zip" == atti:
  68. zip = value
  69. else:
  70. break
  71. iline += 1
  72. else:
  73. t = Task(dir,bsub,sufix,becld,zip)
  74. self._list.append(t)
  75. except:
  76. return False
  77. return True
  78. def DoBackup(self):
  79. for e in self._list:
  80. try:
  81. zip = zipfile.ZipFile(e.zip,‘w‘,zipfile.ZIP_DEFLATED)
  82. self.ZipDir(zip,e.dir,e.bsub,e.suffix,e.exclude)
  83. zip.close()
  84. except:
  85. print("exception raised!")
  86. return False
  87. return True
  88. def ZipDir(self,zip,dir,bsub,sfxs,ecld):
  89. subdir = ""
  90. path = ""
  91. if os.path.isdir(dir):
  92. paths = os.listdir(dir)
  93. #备份本目录
  94. print("ZipDir: ",dir)
  95. for e in paths:
  96. path = dir + "/" + e
  97. ext = os.path.splitext(e)[1][1:]
  98. if os.path.isfile(path) and Task.isfilter(ext,sfxs,ecld):
  99. print ("ZipFile: ",path)
  100. zip.write(path)
  101. #清理子目录
  102. if bsub:
  103. for e in paths:
  104. subdir = dir + "/" + e
  105. self.ZipDir(zip,subdir,bsub,sfxs,ecld)
  106. def PrintTask(self):
  107. for e in self._list:
  108. print (e.dir,e.bsub,e.suffix,e.exclude,e.zip)
  109. if ‘__main__‘ == __name__:
  110. c = QBackup()
  111. c.ReadTask("bkup.txt")
  112. c.DoBackup()

用python写小应用的确很爽啊!C++就太笨重了!

时间: 2024-10-13 18:09:32

Python 实例: 备份文件的相关文章

使用docker安装部署Spark集群来训练CNN(含Python实例)

使用docker安装部署Spark集群来训练CNN(含Python实例) 本博客仅为作者记录笔记之用,不免有很多细节不对之处. 还望各位看官能够见谅,欢迎批评指正. 博客虽水,然亦博主之苦劳也. 如需转载,请附上本文链接,不甚感激! http://blog.csdn.net/cyh_24/article/details/49683221 实验室有4台神服务器,每台有8个tesla-GPU,然而平时做实验都只使用了其中的一个GPU,实在暴遣天物! 于是想用spark来把这些GPU都利用起来.听闻d

【转载】python实例手册

今天西爬虫的时候遇到了问题,在网上不停地查找资料,居然碰到两篇好文章: 1.python实例手册   作者:没头脑的土豆 另一篇在这:shell实例手册 python实例手册 #encoding:utf8 # 设定编码-支持中文 0说明 手册制作: 雪松 更新日期: 2013-12-19 欢迎系统运维加入Q群: 198173206 # 加群请回答问题 请使用"notepad++"打开此文档,"alt+0"将函数折叠后方便查阅 请勿删除信息,转载请说明出处,抵制不道德

Python实例 -- 爬虫

1 #coding="utf-8" 2 3 import urllib2 4 import re 5 import threading 6 import time 7 8 """ 9 抓取代理发布页的ip和port10 http://www.xici.net.co/nn/%d 11 """ 12 13 proxylist = [] 14 15 16 def get_proxy_from_cnproxy(): 17 global

python实例手册

python实例手册 #encoding:utf8 # 设定编码-支持中文 0说明 手册制作: 雪松 更新日期: 2013-12-19 欢迎系统运维加入Q群: 198173206 # 加群请回答问题 请使用"notepad++"打开此文档,"alt+0"将函数折叠后方便查阅 请勿删除信息,转载请说明出处,抵制不道德行为. 错误在所难免,还望指正! # python实例手册下载地址: http://hi.baidu.com/quanzhou722/item/cf447

【NLP】Python实例:基于文本相似度对申报项目进行查重设计

Python实例:申报项目查重系统设计与实现 作者:白宁超 2017年5月18日17:51:37 摘要:关于查重系统很多人并不陌生,无论本科还是硕博毕业都不可避免涉及论文查重问题,这也对学术不正之风起到一定纠正作用.单位主要针对科技项目申报审核,传统的方式人力物力比较大,且伴随季度性的繁重工作,效率不高.基于此,单位觉得开发一款可以达到实用的智能查重系统.遍及网络文献,终未得到有价值的参考资料,这个也是自然.首先类似知网,paperpass这样的商业公司其毕业申报专利并进行保密,其他科研单位因发

第一个python实例--监控cpu

1 #第一个python实例:监控cpu 2 #/bin/bash/env Python 3 from __future__ import print_function 4 from collections import OrderedDict 5 import pprint 6 7 def CPUinfo(): 8 ''' Return the information in /proc/CPUinfo 9 as a dictionary in the following format: 10

python实例31[列出目录下所有的文件到txt]

代码: (使用os.listdir) import os def ListFilesToTxt(dir,file,wildcard,recursion):    exts = wildcard.split(" ")    files = os.listdir(dir)    for name in files:        fullname=os.path.join(dir,name)        if(os.path.isdir(fullname) & recursion

Python实例31[批量对目录下文件重命名]

经常会遇到下载的文件或电子书,名字中间都包含了一些网址信息,实际使用中由于名字太长不方便,下面的脚本使用正则表达式来对目录下的所有文件重命名:例如: 修改前:[大家网]Mac OS X for Unix Geeks[www.TopSage.com].mobi修改后:Mac OS X for Unix Geeks.mobi python代码如下 import osimport re def rename_dir(dir,regex,f):  if not os.path.isdir(dir) or

python实例31[生成随即的密码]

代码: import randomimport stringimport time # strong.high = 3  #random for the whole passwd#storng.middle = 2  # include one special sign#strong.ow = 1  # just include characters or digits def mkpassByRandom(size=8, strong = 2):    chars = []    chars.