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 相关文章推荐
pygame学习笔记(5):游戏精灵
Apr 15 Python
在IIS服务器上以CGI方式运行Python脚本的教程
Apr 25 Python
python2.7读取文件夹下所有文件名称及内容的方法
Feb 24 Python
使用Scrapy爬取动态数据
Oct 21 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
Jun 24 Python
Python OpenCV 使用滑动条来调整函数参数的方法
Jul 08 Python
Django中celery执行任务结果的保存方法
Jul 12 Python
python中class的定义及使用教程
Sep 18 Python
NumPy排序的实现
Jan 21 Python
Python 格式化输出_String Formatting_控制小数点位数的实例详解
Feb 04 Python
PYQT5 vscode联合操作qtdesigner的方法
Mar 24 Python
python数字图像处理实现图像的形变与缩放
Jun 28 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中isset()和unset()函数的用法小结
2014/03/11 PHP
php学习笔记之基础知识
2014/11/08 PHP
Yii实现多按钮保存与提交的方法
2014/12/03 PHP
smarty的section嵌套循环用法示例
2016/05/28 PHP
laravel框架之数据库查出来的对象实现转化为数组
2019/10/23 PHP
PHP多进程简单实例小结
2019/11/09 PHP
js CSS操作方法集合
2008/10/31 Javascript
JavaScript 封装Ajax传递的数据代码
2009/06/05 Javascript
基于jquery的一个图片hover的插件
2010/04/24 Javascript
JS图片根据鼠标滚动延时加载的实例代码
2013/07/13 Javascript
JavaScript动态修改网页元素内容的方法
2015/03/21 Javascript
JS+CSS实现表格高亮的方法
2015/08/05 Javascript
解析jQueryEasyUI的使用
2016/11/22 Javascript
Angular2 组件交互实例详解
2017/08/24 Javascript
深入理解vue-router之keep-alive
2017/08/31 Javascript
详解用Node.js实现Restful风格webservice
2017/09/29 Javascript
如何以Angular的姿势打开Font-Awesome详解
2018/04/22 Javascript
微信小程序实现圆形进度条动画
2020/11/18 Javascript
JS实现点击发送验证码 xx秒后重新发送功能
2019/07/30 Javascript
Nuxt.js实现一个SSR的前端博客的示例代码
2019/09/06 Javascript
js模拟F11页面全屏显示
2019/09/17 Javascript
python中bisect模块用法实例
2014/09/25 Python
Python的dict字典结构操作方法学习笔记
2016/05/07 Python
Python装饰器基础概念与用法详解
2018/12/22 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
2019/02/26 Python
Pytorch上下采样函数--interpolate用法
2020/07/07 Python
乌克兰电子产品和家用电器购物网站:TOUCH
2019/08/09 全球购物
建材业务员岗位职责
2013/12/08 职场文书
财务会计实习报告体会
2013/12/20 职场文书
装饰资料员岗位职责
2013/12/30 职场文书
公司开业庆典策划方案
2014/06/04 职场文书
公司领导班子对照检查存在问题整改措施
2014/10/02 职场文书
费城故事观后感
2015/06/10 职场文书
详解CocosCreator项目结构机制
2021/04/14 Javascript
Java实现斗地主之洗牌发牌
2021/06/14 Java/Android
如何创建一个创建MySQL数据库中的datetime类型
2022/03/21 MySQL