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进程通信之匿名管道实例讲解
Apr 11 Python
在Python的Django框架中编写错误提示页面
Jul 22 Python
Python序列操作之进阶篇
Dec 08 Python
python学习之面向对象【入门初级篇】
Jan 21 Python
Python利用itchat对微信中好友数据实现简单分析的方法
Nov 21 Python
pandas or sql计算前后两行数据间的增值方法
Apr 20 Python
对python插入数据库和生成插入sql的示例讲解
Nov 14 Python
Python实现微信消息防撤回功能的实例代码
Apr 29 Python
python中时间转换datetime和pd.to_datetime详析
Aug 11 Python
python rsa实现数据加密和解密、签名加密和验签功能
Sep 18 Python
利用python清除移动硬盘中的临时文件
Oct 28 Python
python字符串的多行输出的实例详解
Jun 08 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
mysql 的 like 问题,超强毕杀记!!!
2007/01/18 PHP
深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
2013/06/06 PHP
PHP中使用SimpleXML检查XML文件结构实例
2015/01/07 PHP
WordPress自定义时间显示格式
2015/03/27 PHP
PHP实现的蚂蚁爬杆路径算法代码
2015/12/03 PHP
非常重要的php正则表达式详解
2016/01/04 PHP
PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)
2017/07/27 PHP
php设计模式之迭代器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
Gambit vs ForZe BO3 第三场 2.13
2021/03/10 DOTA
Sample script that deletes a SQL Server database
2007/06/16 Javascript
flash 得到自身url参数的代码
2009/11/15 Javascript
jQuery Tab插件 用于在Tab中显示iframe,附源码和详细说明
2011/06/27 Javascript
JQueryEasyUI datagrid框架的进阶使用
2013/04/08 Javascript
使用js画图之画切线
2015/01/12 Javascript
JavaScript实现16进制颜色值转RGB的方法
2015/02/09 Javascript
js实现文本框输入文字个数限制代码
2015/12/25 Javascript
AngularJS中$watch和$timeout的使用示例
2016/09/20 Javascript
viewer.js实现图片预览功能
2020/06/24 Javascript
python读取注册表中值的方法
2013/04/08 Python
virtualenv实现多个版本Python共存
2017/08/21 Python
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
2017/08/21 Python
一个Python最简单的接口自动化框架
2018/01/02 Python
python3 拼接字符串的7种方法
2018/09/12 Python
python交互模式下输入换行/输入多行命令的方法
2019/07/02 Python
Python绘制三角函数图(sin\cos\tan)并标注特定范围的例子
2019/12/04 Python
python+selenium+Chrome options参数的使用
2020/03/18 Python
HTML5 实现图片上传预处理功能
2020/02/06 HTML / CSS
YSL圣罗兰美妆官方旗舰店:购买YSL口红
2018/04/16 全球购物
中国制造网:Made-in-China.com
2019/10/25 全球购物
应届生求职推荐信
2013/10/28 职场文书
物理系毕业生自荐信
2013/11/01 职场文书
房产销售独家委托书范本
2014/10/01 职场文书
小学六一主持词开场白
2015/05/28 职场文书
步步惊心观后感
2015/06/12 职场文书
Python Pandas常用函数方法总结
2021/06/15 Python
redis cluster支持pipeline的实现思路
2021/06/23 Redis