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通过自定义isnumber函数判断字符串是否为数字的方法
Apr 23 Python
如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求
Oct 13 Python
总结python爬虫抓站的实用技巧
Aug 09 Python
Python实现读取json文件到excel表
Nov 18 Python
浅谈Python2获取中文文件名的编码问题
Jan 09 Python
致Python初学者 Anaconda入门使用指南完整版
Apr 05 Python
python抓取网页内容并进行语音播报的方法
Dec 24 Python
set在python里的含义和用法
Jun 24 Python
Pandas-Cookbook 时间戳处理方式
Dec 07 Python
Python count函数使用方法实例解析
Mar 23 Python
详解Python多线程下的list
Jul 03 Python
Python趣味挑战之给幼儿园弟弟生成1000道算术题
May 28 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 空格,换行,跳格使用说明
2009/12/18 PHP
PHP字符串处理的10个简单方法
2010/06/30 PHP
smarty模板引擎中自定义函数的方法
2015/01/22 PHP
KindEditor在php环境下上传图片功能集成的方法示例
2020/07/20 PHP
Lazy Load 延迟加载图片的 jQuery 插件
2010/02/06 Javascript
教你如何使用firebug调试功能了解javascript闭包和this
2015/03/04 Javascript
Node.js事件驱动
2015/06/18 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
2015/09/01 Javascript
Jquery 垂直多级手风琴菜单附源码下载
2015/11/17 Javascript
JS控制文本域只读或可写属性的方法
2016/06/24 Javascript
JS简单获取及显示当前时间的方法
2016/08/03 Javascript
基于Node.js模板引擎教程-jade速学与实战1
2017/09/17 Javascript
vue+mousemove实现鼠标拖动功能(拖动过快失效问题解决方法)
2018/08/24 Javascript
使用微信小程序开发弹出框应用实例详解
2018/10/18 Javascript
LayUI switch 开关监听 获取属性值、更改状态的方法
2019/09/21 Javascript
[04:03]DOTA2英雄梦之声_第02期_风暴之灵
2014/06/30 DOTA
[59:44]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 paiN vs iG
2018/03/31 DOTA
Python实现在线程里运行scrapy的方法
2015/04/07 Python
python开发利器之ulipad的使用实践
2017/03/16 Python
python判断设备是否联网的方法
2018/06/29 Python
Python OpenCV读取png图像转成jpg图像存储的方法
2018/10/28 Python
解决nohup执行python程序log文件写入不及时的问题
2019/01/14 Python
python tkinter窗口最大化的实现
2019/07/15 Python
python-Web-flask-视图内容和模板知识点西宁街
2019/08/23 Python
手把手教你pycharm专业版安装破解教程(linux版)
2019/09/26 Python
Django 如何使用日期时间选择器规范用户的时间输入示例代码详解
2020/05/22 Python
通俗讲解python 装饰器
2020/09/07 Python
如何将Pycharm中调整字体大小的方式设置为&quot;ctrl+鼠标滚轮上下滑&quot;
2020/11/17 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
2020/12/21 Python
CSS3 实现图形下落动画效果
2020/11/13 HTML / CSS
HTML5的结构和语义(5):内嵌媒体
2008/10/17 HTML / CSS
100%植物性、有机、即食餐:Sakara Life
2018/10/25 全球购物
2014学雷锋活动心得体会
2014/03/10 职场文书
Pytorch GPU内存占用很高,但是利用率很低如何解决
2021/06/01 Python
spring boot项目application.properties文件存放及使用介绍
2021/06/30 Java/Android
Redis基本数据类型String常用操作命令
2022/06/01 Redis