Python入门实战——文件压缩备份1.0(超详解注释)

问题:想要一款程序来备份我所有的重要文件。

方案:需要备份的文件与目录应在一份列表中予以指定。
 备份必须存储在一个主备份目录中。
 备份文件将打包压缩成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文件夹里的现象:


总结:这种涉及到文件存取的程序,调试过程中一定要细心,看清楚程序中写的文件路径和磁盘里对应的路径下有没有文件。取文件夹的名字最好清晰明了,生成一个新的就删掉旧的,防止看花走了眼。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值