博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python小程序:备份文件
阅读量:6689 次
发布时间:2019-06-25

本文共 3176 字,大约阅读时间需要 10 分钟。

设计程序,有以下步骤:

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

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

  文件备份成一个zip文件。

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

 

解决方案:

版本一:

1 #!/usr/bin/python 2 #filename: backup_ver1.py 3  4 import os 5 import time 6  7 source=['/home/swaroop/byte','/home/swaroop/bin'] 8 target_dir='/mnt/e/backup/' 9 target=target_dir+time.strftime('%Y%m%d%H%M%S')+'.zip'10 zip_command="zip -qr '%s' %s"%(target,''.join(source))11 12 if os.system(zip_command)==0:13     print 'Successful backup to',target14 else:15     print 'Backup FAILED'16 17 18 #输出19 20 $ pyhon backup_ver1.py21 Successful backup to22 /mnt/e/backup/20041208073244.zip

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

 

版本二:

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

代码:

1 #!/usr/bin/python 2 #filename: backup_ver2.py 3  4 import os 5 import time 6  7 source=['/home/swaroop/byte','/home/swaroop/bin'] 8 target_dir='/mnt/e/backup/' 9 today=target_dir+time.strftime('%Y%m%d)10 now=time.strftime('%H%M%S')11 if not os.path.exists(today):12     os.mkdir(today)13     print 'Successfully created directory',today14 target=today+os.sep+now+'.zip'15 zip_command="zip -qr '%s' %s"%(target,''.join(source))16 17 if os.system(zip_command)==0:18     print 'Successful backup to',target19 else:20     print 'Backup FAILED'21 22 23 #输出24 25 $ pyhon backup_ver2.py26 Successfully created directory27 /mnt/e/backup/2004120828 Successful backup to29 /mnt/e/backup/20041208/080020.zip30 31 $ pyhon backup_ver2.py32 Successful backup to33 /mnt/e/backup/20041208/080428.zip

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

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

 

版本三:

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

代码:

1 #!/usr/bin/python 2 #filename: backup_ver2.py 3  4 import os 5 import time 6  7 source=['/home/swaroop/byte','/home/swaroop/bin'] 8 target_dir='/mnt/e/backup/' 9 today=target_dir+time.strftime('%Y%m%d)10 now=time.strftime('%H%M%S')11 comment=raw_input('Enter a comment --> ')12 if len(comment)==0:13     target=today+os.sep+now+'.zip'14 else:15     target=today+os.sep+now+'_'+\16         comment.replace(' ','_')+'.zip'17 if not os.path.exists(today):18     os.mkdir(today)19     print 'Successfully created directory',today20 zip_command="zip -qr '%s' %s"%(target,''.join(source))21 22 if os.system(zip_command)==0:23     print 'Successful backup to',target24 else:25     print 'Backup FAILED'26 27 28 #输出29 30 $ pyhon backup_ver3.py31 Enter a comment --> added new examples32 Successful backup to33 /mnt/e/backup/20041208/082156_added_new_examples.zip34 35 $ pyhon backup_ver3.py36 Enter a comment -->37 Successful backup to38 /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。

转载地址:http://tukoo.baihongyu.com/

你可能感兴趣的文章
iOS进公司后可能用到的开源库和第三方组件
查看>>
一篇文章,带你了解gulp
查看>>
前端基础知识复习之CSS
查看>>
命令模式与它在源码中的运用
查看>>
再和“面向对象”谈恋爱—面向对象编程概念
查看>>
jquery datatable + backbone 的重构。
查看>>
原型模式与深浅拷贝
查看>>
数据库之互联网常用分库分表方案
查看>>
个人理解emulateJSON作用 与java后台接口参数的关系
查看>>
浏览器同源策略和跨域请求
查看>>
js JSON对象属性
查看>>
jsp内部传参与重定向传参
查看>>
基于PCA的人脸降维
查看>>
2017-01-04
查看>>
机器学习中的度量——相似度
查看>>
Expert 诊断优化系列------------------冤枉磁盘了
查看>>
优化你的java代码性能
查看>>
win10家庭版安装Docker
查看>>
C#获取电脑硬件信息(CPU ID、主板ID、硬盘ID、BIOS编号)
查看>>
搭建 AngularJS+Ionic+Cordova 开发环境并运行一个demo
查看>>