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 相关文章推荐
python3+PyQt5实现使用剪贴板做复制与粘帖示例
Jan 24 Python
由浅入深讲解python中的yield与generator
Apr 05 Python
Python有序字典简单实现方法示例
Sep 28 Python
python做量化投资系列之比特币初始配置
Jan 23 Python
在Python中给Nan值更改为0的方法
Oct 30 Python
解决vscode python print 输出窗口中文乱码的问题
Dec 03 Python
Python数据类型之Tuple元组实例详解
May 08 Python
pandas数据筛选和csv操作的实现方法
Jul 02 Python
Python操作列表常用方法实例小结【创建、遍历、统计、切片等】
Oct 25 Python
如何使用python进行pdf文件分割
Nov 11 Python
python如何调用java类
Jul 05 Python
全网非常详细的pytest配置文件
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
消息持续发送的完整例子
2006/10/09 PHP
PHP带节点操作的无限分类实现方法详解
2016/11/09 PHP
PHP基于自增数据如何生成不重复的随机数示例
2017/05/19 PHP
PHP实现下载远程图片保存到本地的方法
2017/06/19 PHP
Laravel中批量赋值Mass-Assignment的真正含义详解
2017/09/29 PHP
CodeIgniter框架数据库基本操作示例
2018/05/24 PHP
javascript jscroll模拟html元素滚动条
2012/12/18 Javascript
artDialog双击会关闭对话框的修改过程分享
2013/08/05 Javascript
jquery select 设置默认选中的示例代码
2014/02/07 Javascript
ExtJS4 动态生成的grid导出为excel示例
2014/05/02 Javascript
如何在node的express中使用socket.io
2014/12/15 Javascript
javascript中typeof操作符和constucor属性检测
2015/02/26 Javascript
js闭包实现按秒计数
2015/04/23 Javascript
javascript中setAttribute兼容性用法分析
2016/12/12 Javascript
WdatePicker.js时间日期插件的使用方法
2017/07/26 Javascript
node实现登录图片验证码的示例代码
2018/04/20 Javascript
js 图片转base64的方式(两种)
2018/04/24 Javascript
详解vue 项目白屏解决方案
2018/10/31 Javascript
搭建基于express框架运行环境的方法步骤
2018/11/15 Javascript
微信小程序订阅消息(java后端实现)开发
2020/06/01 Javascript
JavaScript点击按钮生成4位随机验证码
2021/01/28 Javascript
使用Python的Twisted框架编写简单的网络客户端
2015/04/16 Python
Python实现的飞速中文网小说下载脚本
2015/04/23 Python
梯度下降法介绍及利用Python实现的方法示例
2017/07/12 Python
python3调用百度翻译API实现实时翻译
2018/08/16 Python
Python实现iOS自动化打包详解步骤
2018/10/03 Python
对python调用RPC接口的实例详解
2019/01/03 Python
详解python中__name__的意义以及作用
2019/08/07 Python
Python3使用PySynth制作音乐的方法
2019/09/09 Python
python os.path.isfile()因参数问题判断错误的解决
2019/11/29 Python
python 解压、复制、删除 文件的实例代码
2020/02/26 Python
Python基于jieba, wordcloud库生成中文词云
2020/05/13 Python
入党思想汇报
2014/01/05 职场文书
安全生产承诺书
2014/03/26 职场文书
三严三实心得体会范文
2014/10/13 职场文书
小学班主任研修日志
2015/11/13 职场文书