Python实现备份文件实例


Posted in Python onSeptember 16, 2014

本文实例讲述了Python实现备份文件的方法,是一个非常实用的技巧。分享给大家供大家参考。具体方法如下:

该实例主要实现读取一个任务文件, 根据指定的任务参数自动备份.

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

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

python代码如下:

# -*- coding: utf-8 -*- 
import sys
import os
import zipfile
class Task:
 #dir str directory
 #bsub BOOL include subdirectory
 #sfx str postsuffix ,sepeated by '|'
 #ecld BOOL include or execlude the postsuffix sfx
 def __init__(self,dir,bsub,sfx,ecld,zip):
 self.dir = dir
 self.bsub = bsub
 self.suffix = sfx.split("|")
 self.exclude = ecld
 self.zip = zip
 
 @staticmethod
 def isfilter(sfx,sfxs,bexcld):
 bFound = False
 for e in sfxs:
  if e == sfx:
  bFound = True
  break 
 if bexcld:
  return not bFound;
 else:
  return bFound;
 
class QBackup:
 '''备份指定目录下具备指定扩展名的文件'''
 def __init__(self):
 self._list = []
 
 def __del__(self):
 pass
 
 #tfile 任务文件
 def ReadTask(self,tfile):
 dir = ""
 bsub = False
 sfx = ""
 becld = False
 zip = ""
 try:
  f = open(tfile,'r')
  while True:
  line = f.readline()
  if len(line) == 0:
   break;
  line = line.strip(" ")
  if "[Task]/n".lower() == line.lower():
   # 读取接下来的4行
   iline = 1
   while iline <= 5:
   line = f.readline()
   line = line.strip(" /t/n") # 去除前后的空白符 
   idx = line.find("=")
   if -1 == idx:
    break;
   atti = line[0:idx]
   value = line[idx+1:]
   print(value)
   if "dir" == atti:
    dir = value
   elif "recusive" == atti:
    bsub = bool(int(value))
   elif "suffix" == atti:
    sufix = value
   elif "exclude" == atti:
    becld = bool(int(value))
   elif "zip" == atti:
    zip = value
   else:
    break
   iline += 1
   else:
   t = Task(dir,bsub,sufix,becld,zip)
   self._list.append(t)
 except:
  return False
 return True
 
 def DoBackup(self):
 for e in self._list:
  try:
  zip = zipfile.ZipFile(e.zip,'w',zipfile.ZIP_DEFLATED)
  self.ZipDir(zip,e.dir,e.bsub,e.suffix,e.exclude)
  zip.close()
  except:
  print("exception raised!")
  return False
 return True 
 def ZipDir(self,zip,dir,bsub,sfxs,ecld):
 subdir = ""
 path = ""
 if os.path.isdir(dir):
  paths = os.listdir(dir)
  #备份本目录
  print("ZipDir: ",dir)
  for e in paths:
  path = dir + "/" + e
  ext = os.path.splitext(e)[1][1:]
  if os.path.isfile(path) and Task.isfilter(ext,sfxs,ecld):
   print ("ZipFile: ",path)
   zip.write(path)
  #清理子目录
  if bsub: 
  for e in paths:
   subdir = dir + "/" + e
   self.ZipDir(zip,subdir,bsub,sfxs,ecld)
 
 def PrintTask(self):
 for e in self._list:
  print (e.dir,e.bsub,e.suffix,e.exclude,e.zip)
 
if '__main__' == __name__:
 c = QBackup()
 c.ReadTask("bkup.txt")
 c.DoBackup()

希望本文所述对大家Python程序设计的学习有所帮助。

Python 相关文章推荐
Python中IPYTHON入门实例
May 11 Python
Python统计文件中去重后uuid个数的方法
Jul 30 Python
python的random模块及加权随机算法的python实现方法
Jan 04 Python
高效测试用例组织算法pairwise之Python实现方法
Jul 19 Python
Python数据分析之如何利用pandas查询数据示例代码
Sep 01 Python
Python实现购物系统(示例讲解)
Sep 13 Python
Python列表推导式与生成器表达式用法示例
Feb 08 Python
Python利用requests模块下载图片实例代码
Aug 12 Python
如何基于python测量代码运行时间
Dec 25 Python
Python实现图片识别加翻译功能
Dec 26 Python
python中np是做什么的
Jul 21 Python
Python TestSuite生成测试报告过程解析
Jul 23 Python
Python多进程编程技术实例分析
Sep 16 #Python
Python专用方法与迭代机制实例分析
Sep 15 #Python
跟老齐学Python之有容乃大的list(3)
Sep 15 #Python
跟老齐学Python之有容乃大的list(2)
Sep 15 #Python
跟老齐学Python之有容乃大的list(1)
Sep 14 #Python
跟老齐学Python之一个免费的实验室
Sep 14 #Python
跟老齐学Python之从if开始语句的征程
Sep 14 #Python
You might like
php从数组中随机选择若干不重复元素的方法
2015/03/14 PHP
codeigniter显示所有脚本执行时间的方法
2015/03/21 PHP
PHP编程入门的基本语法知识点总结
2016/01/26 PHP
Zend Framework教程之资源(Resources)用法实例详解
2016/03/14 PHP
PHP保留两位小数的几种方法
2019/07/24 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
jquery实现多级下拉菜单的实例代码
2013/10/02 Javascript
javascript中创建对象的几种方法总结
2013/11/01 Javascript
JS实现遮罩层效果的简单实例
2013/11/12 Javascript
鼠标滚轴控制文本框值的JS代码
2013/11/19 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
jquery 插件实现多行文本框[textarea]自动高度
2015/03/04 Javascript
jQuery 中ajax异步调用的四种方式
2016/06/28 Javascript
Jquery遍历select option和添加移除option的实现方法
2016/08/26 Javascript
JS实现的找零张数最小问题示例
2017/11/28 Javascript
js replace替换字符串同时替换多个方法
2018/11/27 Javascript
vue项目中实现的微信分享功能示例
2019/01/21 Javascript
JQuery中DOM节点的操作与访问方法实例分析
2019/12/23 jQuery
Vue结合路由配置递归实现菜单栏功能
2020/06/16 Javascript
Vue 组件的挂载与父子组件的传值实例
2020/09/02 Javascript
Python切片用法实例教程
2014/09/08 Python
使用Python脚本生成随机IP的简单方法
2015/07/30 Python
Python爬虫代理IP池实现方法
2017/01/05 Python
python web.py开发httpserver解决跨域问题实例解析
2018/02/12 Python
python 制作自定义包并安装到系统目录的方法
2018/10/27 Python
对Python+opencv将图片生成视频的实例详解
2019/01/08 Python
利用django model save方法对未更改的字段依然进行了保存
2020/03/28 Python
Django之富文本(获取内容,设置内容方式)
2020/05/21 Python
Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)
2020/12/14 Python
CSS3 实现footer 固定在底部(无论页面多高始终在底部)
2019/10/15 HTML / CSS
HTML5、Select下拉框右边加图标的实现代码(增进用户体验)
2017/10/16 HTML / CSS
阿联酋网上花店:Ferns N Petals
2018/02/14 全球购物
Viking Direct荷兰:购买办公用品
2019/06/20 全球购物
2015年幼儿园后勤工作总结
2015/04/25 职场文书
浅谈resultMap的用法及关联结果集映射
2021/06/30 Java/Android