python实例:backup 备份
python实例:backup 备份
本文来源于《python简明教程》中的实例
1. 提出问题: 我想要一个可以为我的所有重要文件创建备份的程序。
2. 分析明确问题:我们如何确定该备份哪些文件?备份保存在哪里?我们怎么样存储备份?
3. 设计程序列表:
1). 需要备份的文件和目录由一个列表指定。
2). 备份应该保存在主备份目录中。
3). 文件备份成一个zip文件。
4). zip存档的名称是当前的日期和时间。
4. 编写代码:
版本1:
# Filename: backup_ver1.py import os import time # 1. The files and directories to be backed up are specified in a list. source = r'c:\python34' # 2. The backup must be stored in a main backup directory target_dir = r'c:\python34\scripts' # Remember to change this to what you will be using # 3. The files are backed up into a rar file. # 4. The name of the rar archive is the current date and time target = target_dir + time.strftime('%Y%m%d%H%M%S') + '.rar' # 5. We use the rar command in windows to put the files in a zip archive,you must to be sure you have installed WinRARA and that in your path rar_command = r'"C:\Program Files\WinRAR\WinRAR.exe" A %s %s -r' % (target,source) # Run the backup if os.system(rar_command) == 0: print ('Successful backup to',target)
else: print ('Backup FAILED' )
分析:
1. 注意,source、target_dir地址都可以你任意指定。source是指向的是需要备份的文件,target_dir指向的是需要保存的地址。
source = r'e:\code' target_dir = r'e:\code'
2. zip archive压缩文档的名称用target来指定; 其中运用了
加法操作符来级连字符串(即把两个字符串连接在一起返回一个新的字符串);time.strftime()返回当前的时间;‘.rar’ 扩展名;
字符串join方法把source列表转换为字符串。source可以换成‘’.join(source),貌似只能用这‘’,里面不能加入其它符号。
你一定要将WinRAR的路径放到你的环境变量里面,然后才能直接使用WinRAR命令行。或者你要加上WinRAR的安装路径像这样:
rar_command = r'"C:\Program Files\WinRAR\WinRAR.exe" A %s %s -r' % (target,source)
3. zip命令有一些选项和参数。 rar_command ="zip -qr '%s' %s"% (target,source)。
-q选项用来表示zip命令安静地工作。 -r选项表示zip命令对目录递归地工作,即它包括子目录以及子目录中的文件。两个选项可以组合成缩写形式-qr。所以自己查询相关的帮助文档。
但是自己在cmd命令行中输入 zip可以查询到相关的-q选项,可是没有具体的实例。在ST3中输入help('zip'),有内容,但是一点儿也没帮助,查询了python.doc文档,用搜索检索有zip模块,但是里面的内容很多不相关,这怎样查询这个相关的帮助文档呀? 还有在cmd中搜索 winrar却没有?
在cmd命令中有如下文档说明,这有点像一种格式,
zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]
对应着: rar_command ="zip -qr '%s' %s"% (target,source)。其中 target 对应着[-b path] [-t mmddyyyy] [-n suffixes](注:suffixes 后缀 意思)
因为前面target指向的是压缩文档的名称,包含了(目录名+时间+后缀):target = target_dir + time.strftime('%Y%m%d%H%M%S') + '.rar'
所以[-options] 对应着 -qr,source对应着 [zipfile list],那么[-xi list]对应着什么呢? 好像[-]这个表示可选项。
4. python模块os里面os.system命令返回什么?
比如:
if os.system(XX命令) == 0:
print 'Successful!‘
那按以上这个例子,os.system命令应该返回0了,为什么?
linux命令都是返回0代表成功,这是一个习惯,基本没有人用返回值0代表命令失败. 所以 os.system(命令) 如果返回为0则带便命令执行成功了.
具体返回其他数值代表什么意思,就要看具体命令是什么了.比如最常用的 ls 命令, 有三个返回值:0 代表成功 1 代表小问题 2 代表大问题
你可以使用os.system(ls)试试。。这是linux系统。windows的话使用os.system(dir)试试
这个命令是执行系统命令的,这个命令在命令行下执行,返回的永远是0。在窗口模式下,是所执行命令的返回值。
import os
cmd=r'c:\"Program Files"\notepad.exe c:\Program Files\1.txt'
os.system(cmd)
注意点:cmd中的命令的路径出现空格需要用引号,后面的文件路径不需要引号。
版本2:
关于zip
参考:python在windows下 完成文件备份的例子 : http://blog.csdn.net/qustdjx/article/details/7837619
补充:python执行系统命令的方法 os.system(),os.popen(),commands: http://blog.sina.com.cn/s/blog_5d24f0450101hc4w.html