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里隐藏的“禅”
Jun 16 Python
使用Python中的greenlet包实现并发编程的入门教程
Apr 16 Python
Python基于回溯法子集树模板解决野人与传教士问题示例
Sep 11 Python
浅谈Python NLP入门教程
Dec 25 Python
Python自定义函数定义,参数,调用代码解析
Dec 27 Python
python Celery定时任务的示例
Mar 13 Python
python操作excel的方法(xlsxwriter包的使用)
Jun 11 Python
Python使用gRPC传输协议教程
Oct 16 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
Feb 12 Python
JupyterNotebook 输出窗口的显示效果调整方法
Apr 13 Python
python实现图书馆抢座(自动预约)功能的示例代码
Sep 29 Python
python 实现图片裁剪小工具
Feb 02 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 Date/Time 类型
2008/03/26 PHP
CI框架整合smarty步骤详解
2016/05/19 PHP
php判断是否为ajax请求的方法
2016/11/29 PHP
javascript 一个函数对同一元素的多个事件响应
2009/07/25 Javascript
解析DHTML,JavaScript,DOM,BOM以及WEB标准的描述
2013/06/19 Javascript
javascript实现des解密加密全过程
2014/04/03 Javascript
extjs每个组件要设置唯一的ID否则会出错
2014/06/15 Javascript
删除Javascript Object中间的key
2014/11/18 Javascript
javascript基本包装类型介绍
2015/04/10 Javascript
浅谈bootstrap使用中的一些问题以及解决过程
2016/10/18 Javascript
Angular中$broadcast和$emit的使用方法详解
2017/05/22 Javascript
vue中关闭eslint的方法分析
2018/08/04 Javascript
浅谈Vue.js路由管理器 Vue Router
2018/08/16 Javascript
微信小程序 Animation实现图片旋转动画示例
2018/08/22 Javascript
vue实现动态显示与隐藏底部导航的方法分析
2019/02/11 Javascript
详解微信小程序回到顶部的两种方式
2019/05/09 Javascript
使用watch在微信小程序中实现全局状态共享
2019/06/03 Javascript
Webpack的Loader和Plugin的区别
2020/11/09 Javascript
JS如何监听div的resize事件详解
2020/12/03 Javascript
在Python3中初学者应会的一些基本的提升效率的小技巧
2015/03/31 Python
快速排序的算法思想及Python版快速排序的实现示例
2016/07/02 Python
python分块读取大数据,避免内存不足的方法
2018/12/10 Python
处理Selenium3+python3定位鼠标悬停才显示的元素
2019/07/31 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
2020/10/10 Python
python实现企业微信定时发送文本消息的实例代码
2020/11/25 Python
Pycharm 如何一键加引号的方法步骤
2021/02/05 Python
CSS3田字格列表的样式编写方法
2018/11/22 HTML / CSS
css3实现小箭头各种图形效果
2020/07/08 HTML / CSS
Charlotte Tilbury英国官网:英国彩妆品牌
2017/05/26 全球购物
美国全球旅游运营商:Pacific Holidays
2018/06/18 全球购物
公司财务自我评价分享
2013/12/17 职场文书
中学劳技课教师的自我评价
2014/02/05 职场文书
2014年生产部工作总结
2014/12/17 职场文书
财务统计员岗位职责
2015/04/14 职场文书
详解Go语言运用广度优先搜索走迷宫
2021/06/23 Python
一篇文章告诉你如何实现Vue前端分页和后端分页
2022/02/18 Vue.js