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单元测试框架unittest使用方法讲解
Apr 13 Python
Python通过RabbitMQ服务器实现交换机功能的实例教程
Jun 29 Python
Python操作mongodb的9个步骤
Jun 04 Python
nohup后台启动Python脚本,log不刷新的解决方法
Jan 14 Python
利用Python对文件夹下图片数据进行批量改名的代码实例
Feb 21 Python
Python语言进阶知识点总结
May 28 Python
基于Python的图像数据增强Data Augmentation解析
Aug 13 Python
Python3 Tkinkter + SQLite实现登录和注册界面
Nov 19 Python
Python GUI自动化实现绕过验证码登录
Jan 10 Python
python argparse传入布尔参数false不生效的解决
Apr 20 Python
Python嵌入C/C++进行开发详解
Jun 09 Python
python 基于selenium实现鼠标拖拽功能
Dec 24 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/26 PHP
php array_intersect()函数使用代码
2009/01/14 PHP
深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
2013/02/06 PHP
PHP格式化MYSQL返回float类型的方法
2016/03/30 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结
2020/02/10 PHP
javascript中的缓动效果实现程序
2012/12/29 Javascript
json格式数据的添加,删除及排序方法
2016/01/21 Javascript
AngularJs每天学习之总体介绍
2017/08/07 Javascript
Webpack性能优化 DLL 用法详解
2017/08/10 Javascript
Vue的H5页面唤起支付宝支付功能
2019/04/18 Javascript
小程序scroll-view安卓机隐藏横向滚动条的实现详解
2019/05/16 Javascript
vue实现element表格里表头信息提示功能(推荐)
2019/11/20 Javascript
Vue中qs插件的使用详解
2020/02/07 Javascript
vue-calendar-component 封装多日期选择组件的实例代码
2020/12/04 Vue.js
[03:54]Ehome出征西雅图 回顾2016国际邀请赛晋级之路
2016/08/02 DOTA
[02:32]“虐狗”镜头慎点 2016国际邀请赛中国区预选赛现场玩家采访
2016/06/28 DOTA
Python将list中的string批量转化成int/float的方法
2018/06/26 Python
如何使用python操作vmware
2019/07/27 Python
Django用户认证系统 User对象解析
2019/08/02 Python
Python简单实现区域生长方式
2020/01/16 Python
tensorflow 限制显存大小的实现
2020/02/03 Python
Python3实现监控新型冠状病毒肺炎疫情的示例代码
2020/02/13 Python
Python+unittest+requests 接口自动化测试框架搭建教程
2020/10/09 Python
python对输出的奇数偶数排序实例代码
2020/12/04 Python
使用CSS3中的calc()属性来以算式表达尺寸数值
2016/06/06 HTML / CSS
印度在线杂货店:bigbasket
2018/08/23 全球购物
杭州龙健科技笔试题.net部分笔试题
2016/01/24 面试题
汽车工程专业应届生求职信
2013/10/19 职场文书
学生会招新策划书
2014/02/14 职场文书
十佳青年事迹材料
2014/08/21 职场文书
离退休人员聘用协议书
2014/11/24 职场文书
2014年新农村建设工作总结
2014/12/01 职场文书
2015年毕业实习工作总结
2014/12/12 职场文书
项目中Nginx多级代理是如何获取客户端的真实IP地址
2022/05/30 Servers
TaiShan 200服务器安装Ubuntu 18.04的图文教程
2022/06/28 Servers