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基本数据类型详细介绍
Mar 11 Python
在Python的Flask框架中使用模版的入门教程
Apr 20 Python
Python正则替换字符串函数re.sub用法示例
Jan 19 Python
对Python random模块打乱数组顺序的实例讲解
Nov 08 Python
python实现RabbitMQ的消息队列的示例代码
Nov 08 Python
Python逐行读取文件中内容的简单方法
Feb 26 Python
详解用python实现基本的学生管理系统(文件存储版)(python3)
Apr 25 Python
Python爬虫使用代理IP的实现
Oct 27 Python
PyQT5 emit 和 connect的用法详解
Dec 13 Python
2020新版本pycharm+anaconda+opencv+pyqt环境配置学习笔记,亲测可用
Mar 24 Python
python有几个版本
Jun 17 Python
Python OpenCV超详细讲解基本功能
Apr 02 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/09/20 PHP
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
2012/01/12 PHP
php Ubb代码编辑器函数代码
2012/07/05 PHP
file_get_contents获取不到网页内容的解决方法
2013/03/07 PHP
php中ltrim()、rtrim()与trim()删除字符空格实例
2014/11/25 PHP
php实现在服务器上创建目录的方法
2015/03/16 PHP
php结合ACCESS的跨库查询功能
2015/06/12 PHP
简单PHP会话(session)说明介绍
2016/08/21 PHP
php无限极分类实现方法分析
2019/07/04 PHP
Jquery 插件学习实例1 插件制作说明与tableUI优化
2010/04/02 Javascript
js 控制页面跳转的5种方法
2013/09/09 Javascript
jQuery中bind,live,delegate与one方法的用法及区别解析
2013/12/30 Javascript
JS弹出层单纯的绝对定位居中示例代码
2014/02/18 Javascript
js对象转json数组的简单实现案例
2014/02/28 Javascript
JavaScript实现动态创建CSS样式规则方案
2014/09/06 Javascript
基于js Canvas实现二次贝塞尔曲线
2018/12/25 Javascript
微信小程序出现wx.getLocation再次授权问题的解决方法分析
2019/01/16 Javascript
webgl实现物体描边效果的方法介绍
2019/11/27 Javascript
ES6中Set和Map用法实例详解
2020/03/02 Javascript
使用React代码动态生成栅格布局的方法
2020/05/24 Javascript
原生JavaScript实现拖动校验功能
2020/09/29 Javascript
Python基于Flask框架配置依赖包信息的项目迁移部署
2018/03/02 Python
Django实现支付宝付款和微信支付的示例代码
2018/07/25 Python
python实现决策树分类
2018/08/30 Python
使用Pandas的Series方法绘制图像教程
2019/12/04 Python
Python魔法方法 容器部方法详解
2020/01/02 Python
Python3爬虫中关于Ajax分析方法的总结
2020/07/10 Python
意大利香水和彩妆护肤品购物网站:Ditano
2017/08/13 全球购物
人事专员岗位职责范本
2014/03/04 职场文书
班组长竞聘书
2014/03/31 职场文书
活动倡议书范文
2014/05/13 职场文书
五好家庭申报材料
2014/12/20 职场文书
农业项目投资意向书
2015/05/09 职场文书
Html5新增了哪些功能
2021/04/16 HTML / CSS
常用的MongoDB查询语句的示例代码
2021/07/25 MongoDB
Java 死锁解决方案
2022/05/11 Java/Android