python小程序:备份文件
2024-09-04 12:04:41
设计程序,有以下步骤:
需要备份的文件和目录由一个列表指定。
备份应该保存在主备份目录中。
文件备份成一个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。
最新文章
- CodeForces 13E 分块
- 使用VC++ ATL实现iStylePDF的COM插件
- DIOCP之数据接收事件
- #import vs. @class
- 村田噪声抑制基础教程-第一章 需要EMI静噪滤波器的原因
- 业界最具影响力MySQL精品文章荟萃(300篇)
- tcprstat的使用方式
- Chapter 21_5.2 tab扩展
- Linux的一些简单命令(四)-用户和组账户管理
- Infix to postfix without '(' and ')'
- Linux 容器 vs 虚拟机 —— 谁更胜一筹
- POJ2689-Prime Distance-区间筛素数
- sql笔试题
- MarkdownPad使用
- 运行python文件时出错SyntaxError: Non-UTF-8 code starting with '\xb5' in file, but no encoding declared;
- 【poj3718】 Facer's Chocolate Dream
- ORACLE递归查询(适用于ID,PARENTID结构数据表)
- 机器学习理论基础学习14.2---线性动态系统-粒子滤波 particle filter
- hdu-1121(差分法--数学问题)
- python操作数据库(Mysql)
热门文章
- Leetcode 589. N-ary Tree Preorder Traversal
- [分享]Google 全球 IP 地址库[Google Global Cache IPs]
- MarkDown小技巧
- PHPExcel导出导入
- Set Matrix Zeros
- C++之内存管理
- 转载关于reset vector 和 exception vector
- 洛谷 P3225 [HNOI2012]矿场搭建
- rpm -Uvh 升级时的陷阱
- C# 实现程序只启动一次(总结)