都说生命苦短,我用python, 所以这两天我也开始学python了.

昨天搞了下语法,今天搞出来个实例,备份文件.尽管编码相当烂,但是测试了一下,还真能用.

它读取一个任务文件, 根据指定的任务参数自动备份.

任务文件的格式: (注意,分号后面注释是不支持的)

  1. [task]  ; 一项任务开始
  2. dir=h:/Project  ; 指定备份的目录
  3. recusive=1      ; 是否递归子目录
  4. suffix=h|cpp|hpp|c|user|filters|vcxproj|sln|css|gif|html|bmp|png|lib|dsw|dsp|htm|html|ico|ini|jpg|rc|vssscc ; 指定备份的扩展名
  5. exclude=0   ; 指定是备份上面的参数指定的扩展名还是排除指定的扩展名
  6. zip=Project.zip ; 备份后的文件路径名

这是python代码:

  1. # -*- coding: utf-8 -*-
  2. import sys
  3. import os
  4. import zipfile
  5. class Task:
  6. #dir str directory
  7. #bsub BOOL include subdirectory
  8. #sfx str postsuffix ,sepeated by '|'
  9. #ecld BOOL include or execlude the postsuffix sfx
  10. def __init__(self,dir,bsub,sfx,ecld,zip):
  11. self.dir = dir
  12. self.bsub = bsub
  13. self.suffix = sfx.split("|")
  14. self.exclude = ecld
  15. self.zip = zip
  16. @staticmethod
  17. def isfilter(sfx,sfxs,bexcld):
  18. bFound = False
  19. for e in sfxs:
  20. if e == sfx:
  21. bFound = True
  22. break
  23. if bexcld:
  24. return not bFound;
  25. else:
  26. return bFound;
  27. class QBackup:
  28. '''''备份指定目录下具备指定扩展名的文件'''
  29. def __init__(self):
  30. self._list = []
  31. def __del__(self):
  32. pass
  33. #tfile 任务文件
  34. def ReadTask(self,tfile):
  35. dir = ""
  36. bsub = False
  37. sfx = ""
  38. becld = False
  39. zip = ""
  40. try:
  41. f = open(tfile,'r')
  42. while True:
  43. line = f.readline()
  44. if len(line) == 0:
  45. break;
  46. line = line.strip(" ")
  47. if "[Task]/n".lower() == line.lower():
  48. # 读取接下来的4行
  49. iline = 1
  50. while iline <= 5:
  51. line = f.readline()
  52. line = line.strip(" /t/n")  # 去除前后的空白符
  53. idx = line.find("=")
  54. if -1 == idx:
  55. break;
  56. atti = line[0:idx]
  57. value = line[idx+1:]
  58. print(value)
  59. if "dir" == atti:
  60. dir = value
  61. elif "recusive" == atti:
  62. bsub = bool(int(value))
  63. elif "suffix" == atti:
  64. sufix = value
  65. elif "exclude" == atti:
  66. becld = bool(int(value))
  67. elif "zip" == atti:
  68. zip = value
  69. else:
  70. break
  71. iline += 1
  72. else:
  73. t = Task(dir,bsub,sufix,becld,zip)
  74. self._list.append(t)
  75. except:
  76. return False
  77. return True
  78. def DoBackup(self):
  79. for e in self._list:
  80. try:
  81. zip = zipfile.ZipFile(e.zip,'w',zipfile.ZIP_DEFLATED)
  82. self.ZipDir(zip,e.dir,e.bsub,e.suffix,e.exclude)
  83. zip.close()
  84. except:
  85. print("exception raised!")
  86. return False
  87. return True
  88. def ZipDir(self,zip,dir,bsub,sfxs,ecld):
  89. subdir = ""
  90. path = ""
  91. if os.path.isdir(dir):
  92. paths = os.listdir(dir)
  93. #备份本目录
  94. print("ZipDir: ",dir)
  95. for e in paths:
  96. path = dir + "/" + e
  97. ext = os.path.splitext(e)[1][1:]
  98. if os.path.isfile(path) and Task.isfilter(ext,sfxs,ecld):
  99. print ("ZipFile: ",path)
  100. zip.write(path)
  101. #清理子目录
  102. if bsub:
  103. for e in paths:
  104. subdir = dir + "/" + e
  105. self.ZipDir(zip,subdir,bsub,sfxs,ecld)
  106. def PrintTask(self):
  107. for e in self._list:
  108. print (e.dir,e.bsub,e.suffix,e.exclude,e.zip)
  109. if '__main__' == __name__:
  110. c = QBackup()
  111. c.ReadTask("bkup.txt")
  112. c.DoBackup()

用python写小应用的确很爽啊!C++就太笨重了!

Python 实例: 备份文件的更多相关文章

  1. 第一个python实例--监控cpu

    #第一个python实例:监控cpu #/bin/bash/env Python from __future__ import print_function from collections impo ...

  2. (转)Python实例手册

    原文地址:http://hi.baidu.com/quanzhou722/item/cf4471f8e23d3149932af2a7 实在是太好的资料了,不得不转 python实例手册 #encodi ...

  3. 使用docker安装部署Spark集群来训练CNN(含Python实例)

    使用docker安装部署Spark集群来训练CNN(含Python实例) http://blog.csdn.net/cyh_24/article/details/49683221 实验室有4台神服务器 ...

  4. 【NLP】Python实例:申报项目查重系统设计与实现

    Python实例:申报项目查重系统设计与实现 作者:白宁超 2017年5月18日17:51:37 摘要:关于查重系统很多人并不陌生,无论本科还是硕博毕业都不可避免涉及论文查重问题,这也对学术不正之风起 ...

  5. 转载 python实例手册

    python实例手册 #encoding:utf8# 设定编码-支持中文 0说明 手册制作: 雪松 更新日期: 2013-12-19 欢迎系统运维加入Q群: 198173206 # 加群请回答问题 请 ...

  6. 【NLP】Python实例:基于文本相似度对申报项目进行查重设计

    Python实例:申报项目查重系统设计与实现 作者:白宁超 2017年5月18日17:51:37 摘要:关于查重系统很多人并不陌生,无论本科还是硕博毕业都不可避免涉及论文查重问题,这也对学术不正之风起 ...

  7. python实例、类方法、静态方法

    [python实例.类方法.静态方法] 参考:http://blog.163.com/yang_jianli/blog/static/161990006201122411586729/

  8. 【转载】python实例手册

    今天写爬虫的时候遇到了问题,在网上不停地查找资料,居然碰到两篇好文章: 1.python实例手册   作者:没头脑的土豆 另一篇在这:shell实例手册 python实例手册 #encoding:ut ...

  9. Python实例---利用正则实现计算器[FTL版]

    import re # 格式化 def format_str(str): str = str.replace('--', '+') str = str.replace('-+', '-') str = ...

随机推荐

  1. Android 学习(一)

    这几天被一些功能折磨的要死了,于是放下了这个,看点其它的东西,算是转移一下焦点.床头放了不少书籍,也都被翻阅过,翻阅过,却不曾细细的品味过,俗话说,书可借而不可买也,这话用到自己的身上丝毫不错.因为是 ...

  2. NDK xxxxx could not be resolved解决方法

    Type '*****' could not be resolved Method '******' could not be resolved     问题解决   以下为未尝试方法,如果上面方法解 ...

  3. Android的NDK开发(4)————JNI数据结构之JNINativeMethod

    转至:http://blog.csdn.net/conowen/article/details/7524744 1.JNINativeMethod 结构体的官方定义 typedef struct { ...

  4. 转:Android设置全局变量

    声明:本文转自feiyangxiaomi的博客:http://blog.csdn.net/feiyangxiaomi/article/details/9966215仅供学习使用,转载请指明原作者. 文 ...

  5. Jqgrid demo-史上最强大,没有之一

            为了大家能够更好的学习和使用Jqgrid网格插件,我决定用Strtus2+Spring+hibernate+Jquery+Jqgrid实现一个Jqgrid网格插件的demo.当然官方网 ...

  6. SQL Server:把CSV文件导入到SQL Server表中

    有时候我们可能会把CSV中的数据导入到某个数据库的表中,比如做报表分析的时候. 对于这个问题,我想一点也难不倒程序人员吧!但是要是SQL Server能够完成这个任务,岂不是更好! 对,SQL Ser ...

  7. WebServices生成发布过程及常见问题的解决方法

    春夏秋冬走健康之路看四季养生网 健康饮食 养生问题 母婴保健 养生小常识 3.下一步,我们需要将Myservice文件夹拷贝到C:\Inetpub\wwwroot目录下(重要).如下图所示  然后依次 ...

  8. codevs 1088 神经网络

    bfs.语文题. #include<iostream> #include<cstdio> #include<cstring> #include<algorit ...

  9. apache开源项目 -- Wicket

    [infoq] Apache Wicket是一个功能强大.基于组件的轻量级Web应用框架,能将展现和业务逻辑很好地分离开来.你能用它创建易于测试.调试和支持的高质量Web 2.0应用.假设其他团队交付 ...

  10. 流媒体相关知识介绍 及其 RTP 应用

    一.流媒体简介 随着Internet的日益普及,在网络上传输的数据已经不再局限于文字和图形,而是逐渐向声音和视频等多媒体格式过渡.目前在网络上传输音频/视频(Audio/Video,简称A/V)等多媒 ...