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中内置的NotImplemented类型的用法
Mar 31 Python
在Ubuntu系统下安装使用Python的GUI工具wxPython
Feb 18 Python
Python探索之Metaclass初步了解
Oct 28 Python
python画出三角形外接圆和内切圆的方法
Jan 25 Python
python的sorted用法详解
Jun 25 Python
使用python搭建服务器并实现Android端与之通信的方法
Jun 28 Python
详解Python self 参数
Aug 30 Python
python  logging日志打印过程解析
Oct 22 Python
在Django中实现添加user到group并查看
Nov 18 Python
Python ini文件常用操作方法解析
Apr 26 Python
python基于socket函数实现端口扫描
May 28 Python
python 制作简单的音乐播放器
Nov 25 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
kohana框架上传文件验证规则写法示例
2014/07/14 PHP
在一个js文件里远程调用jquery.js会在ie8下的一个奇怪问题
2010/11/28 Javascript
Firefox中beforeunload事件的实现缺陷浅析
2012/05/03 Javascript
40个新鲜出炉的jQuery 插件和免费教程[上]
2012/07/24 Javascript
关于不同页面之间实现参数传递的几种方式讨论
2017/02/13 Javascript
微信小程序 template模板详解及实例
2017/02/21 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
利用Vue2.x开发实现JSON树的方法
2018/01/04 Javascript
解决layui中的form表单与button的点击事件冲突问题
2018/08/15 Javascript
ECharts地图绘制和钻取简易接口详解
2019/07/12 Javascript
解决vue-router 二级导航默认选中某一选项的问题
2019/11/01 Javascript
微信小程序录音实现功能并上传(使用node解析接收)
2020/02/26 Javascript
手把手教您实现react异步加载高阶组件
2020/04/07 Javascript
[33:19]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第一场 11.26
2020/11/30 DOTA
Python中字典映射类型的学习教程
2015/08/20 Python
Python脚本实现虾米网签到功能
2016/04/12 Python
python自带的http模块详解
2016/11/06 Python
Django 如何获取前端发送的头文件详解(推荐)
2017/08/15 Python
Python openpyxl 遍历所有sheet 查找特定字符串的方法
2018/12/10 Python
Python enumerate函数功能与用法示例
2019/03/01 Python
从0开始的Python学习014面向对象编程(推荐)
2019/04/02 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
2020/04/19 Python
CSS3 圆角效果
2009/07/15 HTML / CSS
以思科路由器为例你写下单臂路由的配置命令
2013/08/03 面试题
思想政治自我鉴定
2013/10/06 职场文书
即兴演讲稿
2014/01/04 职场文书
促销活动总结报告
2014/04/26 职场文书
音乐教育专业自荐信
2014/09/18 职场文书
优秀党员推荐材料
2014/12/18 职场文书
幼儿教师年度个人总结
2015/02/05 职场文书
求职简历自我评价怎么写
2015/03/10 职场文书
2019年暑期安全广播稿!
2019/07/03 职场文书
为什么RedisCluster设计成16384个槽
2021/09/25 Redis
Python Pytorch查询图像的特征从集合或数据库中查找图像
2022/04/09 Python
Ruby GDBM操作简介及数据存储原理
2022/04/19 Ruby
MySQL优化之慢日志查询
2022/06/10 MySQL