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 相关文章推荐
在Django的视图中使用数据库查询的方法
Jul 16 Python
在Linux系统上部署Apache+Python+Django+MySQL环境
Dec 24 Python
机器学习python实战之手写数字识别
Nov 01 Python
python3爬取数据至mysql的方法
Jun 26 Python
浅谈Python反射 &amp; 单例模式
Mar 21 Python
python定时复制远程文件夹中所有文件
Apr 30 Python
python并发编程多进程 模拟抢票实现过程
Aug 20 Python
python中dict()的高级用法实现
Nov 13 Python
Pytest框架之fixture的详细使用教程
Apr 07 Python
如何提高python 中for循环的效率
Apr 15 Python
Python3自定义json逐层解析器代码
May 11 Python
Python中文分词库jieba(结巴分词)详细使用介绍
Apr 07 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 Curl多线程原理实例详解
2013/11/06 PHP
php实现的生成排列算法示例
2019/07/25 PHP
用js实现的检测浏览器和系统的函数
2009/04/09 Javascript
jquery ui dialog里调用datepicker的问题
2009/08/06 Javascript
JS 对象介绍
2010/01/20 Javascript
jquery改变disabled的boolean状态的三种方法
2013/12/13 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
2014/02/12 Javascript
Javascript添加监听与删除监听用法详解
2014/12/19 Javascript
jQuery实现的可编辑表格完整实例
2016/06/20 Javascript
Vue.js表单控件实践
2016/10/27 Javascript
js控制台输出的方法(详解)
2016/11/26 Javascript
Vue.js自定义指令的用法与实例解析
2017/01/18 Javascript
jquery获取transform里的值实现方法
2017/12/12 jQuery
Easyui 去除jquery-easui tab页div自带滚动条的方法
2019/05/10 jQuery
基于Vue实现电商SKU组合算法问题
2019/05/29 Javascript
[00:35]DOTA2上海特级锦标赛 EG战队宣传片
2016/03/04 DOTA
python常见的格式化输出小结
2016/12/15 Python
Python在信息学竞赛中的运用及Python的基本用法(详解)
2017/08/15 Python
python实现大转盘抽奖效果
2019/01/22 Python
2020新版本pycharm+anaconda+opencv+pyqt环境配置学习笔记,亲测可用
2020/03/24 Python
python with语句的原理与用法详解
2020/03/30 Python
Pycharm生成可执行文件.exe的实现方法
2020/06/02 Python
远程调用的原理
2014/07/05 面试题
博士学位自我鉴定范文
2013/12/26 职场文书
学校十一活动方案
2014/02/01 职场文书
护士毕业生自荐信
2014/02/07 职场文书
煤矿安全演讲稿
2014/05/09 职场文书
农村党员一句话承诺
2014/05/30 职场文书
财务务虚会发言材料
2014/10/20 职场文书
2014年保卫部工作总结
2014/11/21 职场文书
2014年客服工作总结与计划
2014/12/09 职场文书
2015年幼儿园后勤工作总结
2015/04/25 职场文书
法院执行局工作总结
2015/08/11 职场文书
防震减灾主题班会
2015/08/14 职场文书
周一问候语大全
2015/11/10 职场文书
MySQL中order by的执行过程
2022/06/05 MySQL