设计程序,有以下步骤:

  需要备份的文件和目录由一个列表指定。

  备份应该保存在主备份目录中。

  文件备份成一个zip文件。

  zip存档的名称是当前的日期和时间。

解决方案:

版本一:

 #!/usr/bin/python
#filename: backup_ver1.py import os
import time source=['/home/swaroop/byte','/home/swaroop/bin']
target_dir='/mnt/e/backup/'
target=target_dir+time.strftime('%Y%m%d%H%M%S')+'.zip'
zip_command="zip -qr '%s' %s"%(target,''.join(source)) if os.system(zip_command)==0:
print 'Successful backup to',target
else:
print 'Backup FAILED' #输出 $ pyhon backup_ver1.py
Successful backup to
/mnt/e/backup/20041208073244.zip

以上代码里,我们在source列表中指定需要备份的文件和目录,target_dir指定存储备份文件的目标目录,zip归档的名称是目前的日期和时间。time.strftime()函数需要我们在上面的程序中使用的那种定制。如,%Y被年份替代,%m被月份替代,其他依次是日时分秒。zip命令有一些参数,-q表示zip命令安静地工作。-r表示zip命令对目录递归地工作,即它包括子目录以及子目录中的文件。选项后跟着zip归档的名称,然后再是待备份的文件和目录列表。我们使用字符串join方法把source列表转换为字符串。最后os.system运行命令,成功则返回0,失败则返回错误号。

版本二:

对前者的优化,采用更好的文件名机制--使用时间作为文件名,日期作为目录名,存放于主备份目录中。这样更易于管理。同时,文件名得以变短。

代码:

 #!/usr/bin/python
#filename: backup_ver2.py import os
import time source=['/home/swaroop/byte','/home/swaroop/bin']
target_dir='/mnt/e/backup/'
today=target_dir+time.strftime('%Y%m%d)
now=time.strftime('%H%M%S')
if not os.path.exists(today):
os.mkdir(today)
print 'Successfully created directory',today
target=today+os.sep+now+'.zip'
zip_command="zip -qr '%s' %s"%(target,''.join(source)) if os.system(zip_command)==0:
print 'Successful backup to',target
else:
print 'Backup FAILED' #输出 $ pyhon backup_ver2.py
Successfully created directory
/mnt/e/backup/20041208
Successful backup to
/mnt/e/backup/20041208/080020.zip $ pyhon backup_ver2.py
Successful backup to
/mnt/e/backup/20041208/080428.zip

使用os.exists函数检验在主备份目录中是否有以当前日期作为名称的目录,若是没有,便使用os.mkdir函数创建。

注意os.sep的用法--这会根据你的操作系统给出目录分隔符,即在linux、unix下它是'/',在windows下它是'\\',而在mac os下它是':'。os.sep有利于移植平台。

版本三:

在zip归档的名称上加一些用户提供的注释,便于区分不同备份的作用。

代码:

 #!/usr/bin/python
#filename: backup_ver2.py import os
import time source=['/home/swaroop/byte','/home/swaroop/bin']
target_dir='/mnt/e/backup/'
today=target_dir+time.strftime('%Y%m%d)
now=time.strftime('%H%M%S')
comment=raw_input('Enter a comment --> ')
if len(comment)==0:
target=today+os.sep+now+'.zip'
else:
target=today+os.sep+now+'_'+\
comment.replace(' ','_')+'.zip'
if not os.path.exists(today):
os.mkdir(today)
print 'Successfully created directory',today
zip_command="zip -qr '%s' %s"%(target,''.join(source)) if os.system(zip_command)==0:
print 'Successful backup to',target
else:
print 'Backup FAILED' #输出 $ pyhon backup_ver3.py
Enter a comment --> added new examples
Successful backup to
/mnt/e/backup/20041208/082156_added_new_examples.zip $ pyhon backup_ver3.py
Enter a comment -->
Successful backup to
/mnt/e/backup/20041208/082316.zip

进一步优化:

改用tar命令

tar='tar -cvzf %s %s -X /home/swaroop/excludes.txt'%(targe,''.join(srcdir))

参数解释:

-c表示创建一个归档
-v表示交互,即命令更具交互性
-z表示使用gzip滤波器
-f表示强迫创建归档,即如果已经有一个同名文件,它会被替换
-X表示含在指定文件名列表中的文件会被排除在备份之外。例如,你可以在文件中指定*~,从而不让备份包括所有以~结尾的文件。

最理想的创建这些归档的方法是分别使用zipfile和tarfile。不推荐使用os.system。

python小程序:备份文件的更多相关文章

  1. 怎么样通过编写Python小程序来统计测试脚本的关键字

    怎么样通过编写Python小程序来统计测试脚本的关键字 通常自动化测试项目到了一定的程序,编写的测试代码自然就会很多,如果很早已经编写的测试脚本现在某些基础函数.业务函数需要修改,那么势必要找出那些引 ...

  2. Python 小程序,对文件操作及其它

    以下是自己写的几个对文件操作的小程序,里面涉及到文件操作,列表(集合,字典)的运用等.比方说,从文件里读取一行数据.分别存放于列表中,再对列表进行操作.如去掉里面的反复项.排序等操作. 常见对文件里行 ...

  3. Day1:第一个python小程序

    Day1:第一个python小程序与开发工具Pycharm 一.Hello World C:\Users\wenxh>python Python 3.6.2 (v3.6.2:5fd33b5, J ...

  4. 一个有意思的Python小程序(全国省会名称随机出题)

    本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 最近比较迷Python,仿照<Python编程快速上手>8.5写了一个随机出卷的小 ...

  5. 【转】我的第一个Python小程序

    原文网址:http://blog.csdn.net/randyqiu/article/details/4484089 人的每个第一次都有点特别的意义,所以下面这个小程序我把他记录下来做个纪念. 因为要 ...

  6. 人人都可以写的可视化Python小程序第二篇:旋转的烟花

    兴趣是最好的老师 枯燥的编程容易让人放弃,兴趣才是最好的老师.无论孩子还是大人,只有发现这件事情真的有趣,我们才会非常执着的去做这件事,比如打游戏.如果编程能像玩游戏一样变得有趣,我相信很多人就特别愿 ...

  7. Appium + python -小程序实例

    from appium import webdriverfrom appium.webdriver.common.touch_action import TouchActionfrom time im ...

  8. 写一个python小程序

    在windows环境下进行操作 window+R 输入cmd  创建一个文件夹 mkdir pytxt 创建一个py文件 py.py  用notepad或者记事本等工具进行编辑 或 首先声明pytho ...

  9. 自己写的一个抢票加速的Python小程序源码分享-----纯属娱乐

    最近这段时间频频看到微信群里发什么 抢票加速,智行.携程.飞猪.美团,对于我这能坐客车就不坐火车的人来说,无所谓靠谱不靠谱 突发奇想的整理了下整个抢票加速的逻辑,写了这个小程序,代码很low,拒绝批评 ...

随机推荐

  1. 预热篇- 总结Delphi Xe4 做App的的可行性分析. ios平台的问题还需要自行学习

    首先澄清一个问题, 很多同学其实是误会了, 以为只要搞定了Delphi 就能很快写快餐程序了.  ios 本身的知识还是需要一些的, 并没有什么捷径可以走. 但如果一个团队有分工协作的话, Delph ...

  2. spring 和springmvc 在 web.xml中的配置

    (1)问题:如何在Web项目中配置Spring的IoC容器? 答:如果需要在Web项目中使用Spring的IoC容器,可以在Web项目配置文件web.xml中做出如下配置: <!-- Sprin ...

  3. Gradle配置IDEA正常识别JPA Metamodel Generator动态生成的代码

    我们在使用JPA动态查询构建查询条件时,为了实现安全的类型检查,常常需要引用Hibernate JPA Metamodel Generator自动为我们生成静态元模型类. 而这些类由于编译时由Hibe ...

  4. JVM年轻代(young generation)老年代(old generation tenured)持久代(permanent generation)GC

    关于jvm内存代,看到这篇文章,转发下 链接地址 ---多谢 虚拟机中的共划分为三个代:年轻代(Young Generation).老年代(Old Generation)和持久代(Permanent ...

  5. ZOJ-Big string(服气思维)

    个人心得:我在分治上看到的,但是感觉跟分治没关系,一眼想到斐波那契数可以找到此时n的字符串,但是无法精确到字母,题解的思路 真是令人佩服,以BA为基准,然后只要此时的长度大于7那么必然可以减去最大的斐 ...

  6. [独孤九剑]持续集成实践(三)- Jenkins安装与配置(Jenkins+MSBuild+GitHub)

    本系列文章包含: [独孤九剑]持续集成实践(一)- 引子 [独孤九剑]持续集成实践(二)– MSBuild语法入门 [独孤九剑]持续集成实践(三)- Jenkins安装与配置(Jenkins+MSBu ...

  7. vuecli3 运行报错

    Microsoft Windows [版本 6.1.7601]版权所有 (c) 2009 Microsoft Corporation.保留所有权利. C:\Users\Administrator\De ...

  8. 【HTML5】Canvas绘图详解-1

    ----->Canvas绘制基础 1,线条绘制 1-1,线条组成的图形和beginPath 案例:绘制由不同颜色的线条组成的图案 1-2,多边形的填充和closePath 案例:绘制封闭具有填充 ...

  9. 一步一步建立 webpack 4 项目

    一步一步建立 webpack 4 项目 cnpm init -y cnpm i webpack --save-dev cnpm i webpack-cli --save-dev 修改 package. ...

  10. poj 3415 Common Substrings——后缀数组+单调栈

    题目:http://poj.org/problem?id=3415 因为求 LCP 是后缀数组的 ht[ ] 上的一段取 min ,所以考虑算出 ht[ ] 之后枚举每个位置作为右端的贡献. 一开始想 ...