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 06 Python
介绍Python中的文档测试模块
Apr 28 Python
python实现类的静态变量用法实例
May 08 Python
Django模板变量如何传递给外部js调用的方法小结
Jul 24 Python
浅谈Python Opencv中gamma变换的使用详解
Apr 02 Python
Python中将变量按行写入txt文本中的方法
Apr 03 Python
python实现飞机大战微信小游戏
Mar 21 Python
浅谈python3发送post请求参数为空的情况
Dec 28 Python
Python lxml解析HTML并用xpath获取元素的方法
Jan 02 Python
django中瀑布流写法实例代码
Oct 14 Python
python框架django项目部署相关知识详解
Nov 04 Python
深入浅析python变量加逗号,的含义
Feb 22 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中的字符串函数
2006/11/24 PHP
初次接触php抽象工厂模式(Elgg)
2010/03/21 PHP
php数组中删除元素之重新索引的方法
2014/09/16 PHP
php自定义hash函数实例
2015/05/05 PHP
php实现每天自动变换随机问候语的方法
2015/05/12 PHP
PHP之浮点数计算比较以及取整数不准确的解决办法
2015/07/29 PHP
thinkPHP框架实现生成条形码的方法示例
2018/06/06 PHP
TNC vs IO BO3 第二场2.13
2021/03/10 DOTA
Javascript操纵Cookie实现购物车程序
2007/02/15 Javascript
Js判断参数(String,Array,Object)是否为undefined或者值为空
2013/11/04 Javascript
jQuery读取和设定KindEditor值的方法
2013/11/22 Javascript
connect中间件session、cookie的使用方法分享
2014/06/17 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
2014/11/12 Javascript
JavaScript中的call方法和apply方法使用对比
2015/08/12 Javascript
jquery SweetAlert插件实现响应式提示框
2015/08/18 Javascript
JS+HTML5实现图片在线预览功能
2017/07/22 Javascript
Vue 中axios配置实例详解
2018/07/27 Javascript
AngularJS $http post 传递参数数据的方法
2018/10/09 Javascript
实例讲解JS中pop使用方法
2019/01/27 Javascript
浅谈JavaScript_DOM学习篇_图片切换小案例
2019/03/19 Javascript
浅谈JS的原型和继承
2019/05/08 Javascript
通过实践编写优雅的JavaScript代码
2019/05/30 Javascript
Python2实现的LED大数字显示效果示例
2017/09/04 Python
pandas数据预处理之dataframe的groupby操作方法
2018/04/13 Python
Python matplotlib以日期为x轴作图代码实例
2019/11/22 Python
Python响应对象text属性乱码解决方案
2020/03/31 Python
美国五金商店:Ace Hardware
2018/03/27 全球购物
EMU Australia澳大利亚官网:澳大利亚本土雪地靴品牌
2019/07/24 全球购物
Python是如何进行类型转换的
2013/06/09 面试题
岗位标兵事迹材料
2014/05/17 职场文书
房租涨价通知
2015/04/23 职场文书
Python自动化爬取天眼查数据的实现
2021/06/15 Python
MySQL如何快速创建800w条测试数据表
2022/03/17 MySQL
画错魏国疆域啦!《派对咖孔明》动画因作画失误于官网致歉
2022/04/07 日漫
Redis实现主从复制方式(Master&Slave)
2022/06/21 Redis
win10忘记pin密码登录不了怎么办?win10忘记pin密码登不进去的解决方法
2022/07/07 数码科技