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函数形参用法实例分析
Aug 04 Python
Python使用matplotlib绘图无法显示中文问题的解决方法
Mar 14 Python
Python中如何使用if语句处理列表实例代码
Feb 24 Python
谈一谈基于python的面向对象编程基础
May 21 Python
python+webdriver自动化环境搭建步骤详解
Jun 03 Python
python itchat给指定联系人发消息的方法
Jun 11 Python
python实现简单五子棋游戏
Jun 18 Python
python 生成器和迭代器的原理解析
Oct 12 Python
Python3.7安装keras和TensorFlow的教程图解
Jun 18 Python
浅谈django channels 路由误导
May 28 Python
详解Django的MVT设计模式
Apr 29 Python
python开发飞机大战游戏
Jul 15 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加速的eAccelerator dll支持文件打包下载
2007/09/30 PHP
php object转数组示例
2014/01/15 PHP
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
2014/05/04 PHP
浅析PHP微信支付通知的处理方式
2014/05/25 PHP
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
2014/11/08 PHP
php中解析带中文字符的url函数分享
2015/01/20 PHP
Zend Framework教程之模型Model用法简单实例
2016/03/04 PHP
在laravel5.2中实现点击用户头像更改头像的方法
2019/10/14 PHP
让广告代码不再影响你的网页加载速度
2006/07/07 Javascript
Javascript 网页黑白效果实现代码(兼容IE/FF等)
2010/04/23 Javascript
Jquery 自定义动画概述及示例
2013/03/29 Javascript
js保留两位小数使用toFixed实现
2013/07/29 Javascript
判断颜色是否合法的正则表达式(详解)
2017/05/03 Javascript
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
2018/03/22 Javascript
JS实现简单随机3D骰子
2019/10/24 Javascript
vue学习之Vue-Router用法实例分析
2020/01/06 Javascript
JS实现简易留言板增删功能
2020/02/08 Javascript
js实现滚动条自动滚动
2020/12/13 Javascript
[00:43]2016完美“圣”典风云人物:单车宣传片
2016/12/02 DOTA
Mac下Supervisor进程监控管理工具的安装与配置
2014/12/16 Python
Python实现信用卡系统(支持购物、转账、存取钱)
2016/06/24 Python
如何在Django项目中引入静态文件
2019/07/26 Python
docker django无法访问redis容器的解决方法
2019/08/21 Python
简单了解python字符串前面加r,u的含义
2019/12/26 Python
Python Numpy库常见用法入门教程
2020/01/16 Python
详解CSS3 rem(设置字体大小) 教程
2017/11/21 HTML / CSS
如何开发一款堪比APP的微信小程序(腾讯内部团队分享)
2016/12/22 HTML / CSS
HTML5新增form控件和表单属性实例代码详解
2019/05/15 HTML / CSS
如何从一个文件档案的尾端新增记录
2016/12/02 面试题
运动会100米解说词
2014/01/23 职场文书
水利学院求职自荐书
2014/02/01 职场文书
领导班子四风问题个人对照检查材料
2014/10/04 职场文书
毕业论文答辩开场白
2015/05/27 职场文书
爱岗敬业先进典型事迹材料(2016推荐版)
2016/02/26 职场文书
残联2016年全国助残日活动总结
2016/04/01 职场文书
MySQL创建管理子分区
2022/04/13 MySQL