Python 实例: 备份文件
都说生命苦短,我用python, 所以这两天我也开始学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写小应用的确很爽啊!C++就太笨重了!
Python 实例: 备份文件的更多相关文章
- 第一个python实例--监控cpu
#第一个python实例:监控cpu #/bin/bash/env Python from __future__ import print_function from collections impo ...
- (转)Python实例手册
原文地址:http://hi.baidu.com/quanzhou722/item/cf4471f8e23d3149932af2a7 实在是太好的资料了,不得不转 python实例手册 #encodi ...
- 使用docker安装部署Spark集群来训练CNN(含Python实例)
使用docker安装部署Spark集群来训练CNN(含Python实例) http://blog.csdn.net/cyh_24/article/details/49683221 实验室有4台神服务器 ...
- 【NLP】Python实例:申报项目查重系统设计与实现
Python实例:申报项目查重系统设计与实现 作者:白宁超 2017年5月18日17:51:37 摘要:关于查重系统很多人并不陌生,无论本科还是硕博毕业都不可避免涉及论文查重问题,这也对学术不正之风起 ...
- 转载 python实例手册
python实例手册 #encoding:utf8# 设定编码-支持中文 0说明 手册制作: 雪松 更新日期: 2013-12-19 欢迎系统运维加入Q群: 198173206 # 加群请回答问题 请 ...
- 【NLP】Python实例:基于文本相似度对申报项目进行查重设计
Python实例:申报项目查重系统设计与实现 作者:白宁超 2017年5月18日17:51:37 摘要:关于查重系统很多人并不陌生,无论本科还是硕博毕业都不可避免涉及论文查重问题,这也对学术不正之风起 ...
- python实例、类方法、静态方法
[python实例.类方法.静态方法] 参考:http://blog.163.com/yang_jianli/blog/static/161990006201122411586729/
- 【转载】python实例手册
今天写爬虫的时候遇到了问题,在网上不停地查找资料,居然碰到两篇好文章: 1.python实例手册 作者:没头脑的土豆 另一篇在这:shell实例手册 python实例手册 #encoding:ut ...
- Python实例---利用正则实现计算器[FTL版]
import re # 格式化 def format_str(str): str = str.replace('--', '+') str = str.replace('-+', '-') str = ...
随机推荐
- Android 学习(一)
这几天被一些功能折磨的要死了,于是放下了这个,看点其它的东西,算是转移一下焦点.床头放了不少书籍,也都被翻阅过,翻阅过,却不曾细细的品味过,俗话说,书可借而不可买也,这话用到自己的身上丝毫不错.因为是 ...
- NDK xxxxx could not be resolved解决方法
Type '*****' could not be resolved Method '******' could not be resolved 问题解决 以下为未尝试方法,如果上面方法解 ...
- Android的NDK开发(4)————JNI数据结构之JNINativeMethod
转至:http://blog.csdn.net/conowen/article/details/7524744 1.JNINativeMethod 结构体的官方定义 typedef struct { ...
- 转:Android设置全局变量
声明:本文转自feiyangxiaomi的博客:http://blog.csdn.net/feiyangxiaomi/article/details/9966215仅供学习使用,转载请指明原作者. 文 ...
- Jqgrid demo-史上最强大,没有之一
为了大家能够更好的学习和使用Jqgrid网格插件,我决定用Strtus2+Spring+hibernate+Jquery+Jqgrid实现一个Jqgrid网格插件的demo.当然官方网 ...
- SQL Server:把CSV文件导入到SQL Server表中
有时候我们可能会把CSV中的数据导入到某个数据库的表中,比如做报表分析的时候. 对于这个问题,我想一点也难不倒程序人员吧!但是要是SQL Server能够完成这个任务,岂不是更好! 对,SQL Ser ...
- WebServices生成发布过程及常见问题的解决方法
春夏秋冬走健康之路看四季养生网 健康饮食 养生问题 母婴保健 养生小常识 3.下一步,我们需要将Myservice文件夹拷贝到C:\Inetpub\wwwroot目录下(重要).如下图所示 然后依次 ...
- codevs 1088 神经网络
bfs.语文题. #include<iostream> #include<cstdio> #include<cstring> #include<algorit ...
- apache开源项目 -- Wicket
[infoq] Apache Wicket是一个功能强大.基于组件的轻量级Web应用框架,能将展现和业务逻辑很好地分离开来.你能用它创建易于测试.调试和支持的高质量Web 2.0应用.假设其他团队交付 ...
- 流媒体相关知识介绍 及其 RTP 应用
一.流媒体简介 随着Internet的日益普及,在网络上传输的数据已经不再局限于文字和图形,而是逐渐向声音和视频等多媒体格式过渡.目前在网络上传输音频/视频(Audio/Video,简称A/V)等多媒 ...