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翻译软件实现代码(使用google api完成)
Nov 26 Python
Python生成不重复随机值的方法
May 11 Python
python读取oracle函数返回值
Jul 18 Python
Python排序算法实例代码
Aug 10 Python
django在接受post请求时显示403forbidden实例解析
Jan 25 Python
Python实现类似比特币的加密货币区块链的创建与交易实例
Mar 20 Python
python使用多进程的实例详解
Sep 19 Python
python实现杨氏矩阵查找
Mar 02 Python
如何使用python把ppt转换成pdf
Jun 29 Python
python如何利用Mitmproxy抓包
Oct 10 Python
Python+Appium实现自动化清理微信僵尸好友的方法
Feb 04 Python
深入解析NumPy中的Broadcasting广播机制
May 30 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
smarty 原来也不过如此~~呵呵
2006/11/25 PHP
在PHP中使用与Perl兼容的正则表达式
2006/11/26 PHP
php中url函数介绍及使用示例
2014/02/13 PHP
Zend Framework常用校验器详解
2016/12/09 PHP
thinkPHP实现基于ajax的评论回复功能
2018/06/22 PHP
YII2框架使用控制台命令的方法分析
2020/03/18 PHP
js 本地预览的简单实现方法
2014/02/18 Javascript
jquery获取节点名称
2015/04/26 Javascript
JavaScript开发Chrome浏览器扩展程序UI的教程
2016/05/16 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
2017/05/11 Javascript
详解Vue-Cli 异步加载数据的一些注意点
2017/08/12 Javascript
JS实现table表格固定表头且表头随横向滚动而滚动
2017/10/26 Javascript
vue项目中v-model父子组件通信的实现详解
2017/12/10 Javascript
Vue 第三方字体图标引入 Font Awesome的方法
2018/09/28 Javascript
Electron整合React使用搭建开发环境的步骤详解
2020/06/07 Javascript
基于ant design日期控件使用_仅月份的操作
2020/10/27 Javascript
基于vue项目设置resolves.alias: '@'路径并适配webstorm
2020/12/02 Vue.js
[02:30]DOTA2英雄基础教程 暗影恶魔
2013/12/17 DOTA
[42:39]老党炸弹人试玩视频
2014/09/03 DOTA
Python 基础教程之闭包的使用方法
2017/09/29 Python
Python实现一个Git日志统计分析的小工具
2017/12/14 Python
学习Python3 Dlib19.7进行人脸面部识别
2018/01/24 Python
Pyqt5自适应布局实例
2019/12/13 Python
Python API 操作Hadoop hdfs详解
2020/06/06 Python
Python学习笔记之装饰器
2020/08/06 Python
python中uuid模块实例浅析
2020/12/29 Python
Avène雅漾美国官方网站:敏感肌肤护理专家
2016/10/24 全球购物
大学生职业生涯设计书
2014/01/02 职场文书
我的中国梦演讲稿400字
2014/08/19 职场文书
2014大四本科生自我鉴定总结
2014/10/04 职场文书
2014年教育实习工作总结
2014/11/22 职场文书
2016年春季运动会加油稿
2015/07/22 职场文书
你知道哪几种MYSQL的连接查询
2021/06/03 MySQL
eval(cmd)与eval($cmd)的区别与联系
2021/07/07 PHP
Redis做数据持久化的解决方案及底层原理
2021/07/15 Redis
分析MySQL优化 index merge 后引起的死锁
2022/04/19 MySQL