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开发之str.format()用法实例分析
Feb 22 Python
Python数字图像处理之霍夫线变换实现详解
Jan 12 Python
Python列表切片操作实例总结
Feb 19 Python
Python数据类型之Tuple元组实例详解
May 08 Python
Python实现计算文件MD5和SHA1的方法示例
Jun 11 Python
opencv python 图像轮廓/检测轮廓/绘制轮廓的方法
Jul 03 Python
python中如何实现将数据分成训练集与测试集的方法
Sep 13 Python
python cv2在验证码识别中应用实例解析
Dec 25 Python
python 项目目录结构设置
Feb 14 Python
解决flask接口返回的内容中文乱码的问题
Apr 03 Python
通过Python扫描代码关键字并进行预警的实现方法
May 24 Python
python3 中使用urllib问题以及urllib详解
Aug 03 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在线打包程序源码
2008/07/27 PHP
国外比较好的几个的Php开源建站平台小结
2010/04/22 PHP
一组PHP加密解密函数分享
2014/06/05 PHP
PHP 验证登陆类分享
2015/03/13 PHP
jQuery控制iFrame(实例代码)
2013/11/19 Javascript
javascript常用函数归纳整理
2014/10/31 Javascript
JavaScript分析、压缩工具JavaScript Analyser
2014/12/31 Javascript
javascript实现无限级select联动菜单
2015/01/02 Javascript
基于JavaScript实现图片点击弹出窗口而不是保存
2016/02/06 Javascript
JS中dom0级事件和dom2级事件的区别介绍
2016/05/05 Javascript
简洁实用的BootStrap jQuery手风琴插件
2016/08/31 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(上)
2017/04/21 Javascript
详谈for循环里面的break和continue语句
2017/07/20 Javascript
20行JS代码实现粘贴板复制功能
2018/02/06 Javascript
jQuery实现表单动态加减、ajax表单提交功能
2018/06/08 jQuery
JavaScript实现省市联动效果
2019/11/22 Javascript
JS造成内存泄漏的几种情况实例分析
2020/03/02 Javascript
javascript实现智能手环时间显示
2020/09/18 Javascript
[04:07]显微镜下的DOTA2第八期——英雄复活动作
2014/06/24 DOTA
[02:57]2014DOTA2国际邀请赛 选手辛苦解说更辛苦
2014/07/10 DOTA
python使用BeautifulSoup分页网页中超链接的方法
2015/04/04 Python
python爬虫获取小区经纬度以及结构化地址
2018/12/30 Python
Python合并同一个文件夹下所有PDF文件的方法
2019/03/11 Python
python为什么要安装到c盘
2020/07/20 Python
Python下载的11种姿势(小结)
2020/11/18 Python
测绘工程本科生求职信
2013/10/10 职场文书
个人房屋转让协议书范本
2014/10/26 职场文书
优秀员工推荐材料
2014/12/20 职场文书
农业项目投资意向书
2015/05/09 职场文书
2015年度残疾人工作总结
2015/05/14 职场文书
2015年女职工工作总结
2015/05/15 职场文书
导盲犬小Q观后感
2015/06/11 职场文书
Python+腾讯云服务器实现每日自动健康打卡
2021/12/06 Python
《勇者辞职不干了》上卷BD发售宣传CM公开
2022/04/08 日漫
MongoDB误操作后使用oplog恢复数据
2022/04/11 MongoDB
python中pd.cut()与pd.qcut()的对比及示例
2022/06/16 Python