问题:想要一款程序来备份我所有的重要文件。
方案:需要备份的文件与目录应在一份列表中予以指定。
备份必须存储在一个主备份目录中。
备份文件将打包压缩成zip文件。
zip压缩文件的文件名由当前日期与时间构成。
我们使用在任何GNU/Linux或Unix发行版中都会默认提供的标准zip命令进行打包。在这里你需要了解到只要有命令行界 面,你就可以使用任何需要用到的压缩或归档命令。
Windows用户:Windows下默认是没有命令行压缩命令的。 解决办法:1、下载7-Zip这个压缩工具使用它的命令(官方地址) 2、下载WinRAR工具,操作同7-Zip 3、GnuWin32 项目页面上下载并安装zip命令,并将C:\ProgramFiles\GnuWin32\bin添加至你的系统的PATH环 境变量中
4、不使用本例的os.system方法来创建归档文件。而是使用标准库中的zipfile或tarfile模块创建归档文件(随时供电脑上没有zip程序的情况下使用)——本人博客(http://blog.csdn.net/yinghuo110)同分类下本项目3.0版本使用这一方法
首先是要备份的源文件目录:
其次是代码
import os
import time
#要备份的文件所在路径,Windows下也可使用 r'D:\test
#程序运行现象:test1文件夹和test1中的test2的文件和文件夹全部备份过去了
#source=['E:\\test1']
#程序运行现象:test2文件夹和test2中的文件和文件夹全部备份过去了
#source=['E:\\test1\\test2']
#程序运行现象:成功备份test1中的文件和test2文件夹和test2中的文件
#source=['E:\\test1\\test2\\','E:\\test\\w.txt']
#程序运行现象:成功备份test1文件夹和其中的文件包括test文件夹和其中的文件
source=['E:\\test1','E:\\test\\w.txt']
#备份主目录,若没有window系统下会自动创建
target_dir='D:\\testw' #注意,不能使用单斜杠
#将当前年月日时分秒作为zip文件的文件名;os.sep的作用是根据系统自动生成"\\"或"/"(方便跨系统)
target=target_dir +os.sep+ time.strftime('%Y%m%d%H%M%S') + '.zip'
#zip_command="7z a -r %s %s"%(target,' '.join(source))
#python2中没有.format(),用上面这种
#7-Zip(百度下载安装,并将7z.exe复制到C盘Windows下) 命令:a 添加 -r 递归
#添加压缩,这句是程序核心
zip_command='7z a {} {}'.format(target,' '.join(source))
#这里必须加上.join()才能成功,.join()是将source列表转换成字符串.
#若没有,只会建立以时间命名的zip,不会把文件备份过去
#' '的作用是在将列表source转换成字符串时,在两个字符串之间加上'空格'且必须要这样隔开,否则找不到源文件
print(zip_command)#将做的事情输出在屏幕上
if os.system(zip_command)==0:
#这一函数可以使命令像是从系统中运行的.
#如果运行成功,它将返回0,如果运行失败,将返回一个错误代码
print ('Successful backup to',target )
else:
print( 'Backup FAILED' )
print('程序结束')
上面列举了四条source=['xxxxx']语句,是为了清楚的举例子。其中三条注释掉了,下面现象是针对source=['E:\\test1','E:\\test\\w.txt']
程序在屏幕上的运行结果
备份目标路径D盘testw文件夹里的现象:
总结:这种涉及到文件存取的程序,调试过程中一定要细心,看清楚程序中写的文件路径和磁盘里对应的路径下有没有文件。取文件夹的名字最好清晰明了,生成一个新的就删掉旧的,防止看花走了眼。