python 简单备份文件脚本v2.0
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 简单备份文件脚本v2.0相关的知识,希望对你有一定的参考价值。
1.0中使用os.system来压缩会依赖计算机之外的程序,使用zipfile内置模块来创建压缩文档会是一个很好的改进,此外使用日期时间来命名压缩文件不是很全面,希望可以增加用户输入文件名以及增强文件归档功能。
zipfile模块
ZipFile.write(filename[, arcname[, compress_type]])
将指定文件添加到zip文档中。filename为文件路径,arcname为添加到zip文档之后保存的名称, 参数compress_type表示压缩方法,它的值可以是zipfile. ZIP_STORED 或zipfile. ZIP_DEFLATED。
>>> import zipfile >>> z=zipfile.ZipFile(r‘D:\\backup\\te.zip‘,‘w‘) >>> z.write(r‘D:QQPCMgr‘) >>> z.close()
将整个文件夹进行压缩
先来学习一下os.walk
迭代这个目录下的所有文件
概述
os.walk() 方法用于通过在目录树种游走输出在目录中的文件名,向上或者向下。
语法
walk()方法语法格式如下:
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
参数
top -- 根目录下的每一个文件夹(包含它自己), 产生3-元组 (dirpath, dirnames, filenames)【文件夹路径, 文件夹名字, 文件名】。
topdown --可选,为True或者没有指定, 一个目录的的3-元组将比它的任何子文件夹的3-元组先产生 (目录自上而下)。如果topdown为 False, 一个目录的3-元组将比它的任何子文件夹的3-元组后产生 (目录自下而上)。
onerror -- 可选,是一个函数; 它调用时有一个参数, 一个OSError实例。报告这错误后,继续walk,或者抛出exception终止walk。
followlinks -- 设置为 true,则通过软链接访问目录。
返回值
该方法没有返回值。
a文件夹中:
#建立了上图的文件目录,查看os.walk的运行效果
# 文件夹路径, 文件夹名字, 文件名
>>> for root,dirs,files in os.walk(‘D:/test‘):
print (root,dirs,files)
D:/test [‘a‘, ‘b‘] [‘1.txt‘, ‘2.txt‘] D:/test\\a [‘aa‘] [‘1.txt‘] D:/test\\a\\aa [] [] D:/test\\b [] []
第三项,也就是文件名,有利于我们进行压缩所有文件操作
>>> z=zipfile.ZipFile(‘D:/tt.zip‘,‘w‘) >>> for root,dirs,files in os.walk(‘D:/test‘): #获取所有文件名 for file in files: z.write(os.path.join(root,file)) #os.path.join形成完整的文件路径名? 不是很明白 2017-11-05 >>> z.close()
本来担心可能会把所有的文件都放到zip文件中而不会建立相应的文件夹,结果反应建立了a文件夹,但没有建立b文件夹,因为b是一个空文件夹(使用这种方式不会有空文件夹,该怎么使他具有呢,以后学习多了来解决一下2017-11-05)
使用zipfile模块来编写Python代码
#Filename:backup.py import os,time,zipfile #要备份的文件的列表 source = [‘C:\\\\Users\\\\hm\\\\Desktop\\\\Web\\\\CH2‘,‘C:\\\\Users\\\\hm\\\\Desktop\\\\Web\\\\CH3‘] #构造好备份目标文件 target_dir = ‘D:\\\\backup‘ target = target_dir + os.sep + time.strftime(‘%Y%m%d%H%M%S‘)+‘.zip‘ #使用zipfile来压缩 #创建压缩包变量z z=zipfile.ZipFile(target,‘w‘) #遍历所有的文件 for back_dir in source: for root,filedirs,files in os.walk(back_dir): for file in files: z.write(os.path.join(root,file)) z.close() print(‘成功备份至‘,target)
备份成功!
另外的改进
以日期作为文件夹,时间来作为默认的文件名,允许用户自己输入备注名
1.如果不存在今天的日期文件夹,那创建一个
2.用户自己输入了名字,使用该名字命名(将空格替换为_以防止出现处理中的问题)
#Filename:backup.py import os,time,zipfile #要备份的文件的列表 source = [‘C:\\\\Users\\\\hm\\\\Desktop\\\\Web\\\\CH2‘,‘C:\\\\Users\\\\hm\\\\Desktop\\\\Web\\\\CH3‘] #构造好备份目标文件 target_dir = ‘D:\\\\backup‘ #创建日期文件夹 today = target_dir + os.sep + time.strftime(‘%Y%m%d‘) if not os.path.exists(today): os.mkdir(today) #创建文件名 comment = input("请输入注释:") if len(comment) == 0: target = today + os.sep + time.strftime(‘%H%M%S‘)+‘.zip‘ else: target = today + os.sep + time.strftime(‘%H%M%S‘) + comment.replace(‘ ‘,‘_‘) + ‘.zip‘ #使用zipfile来压缩 #创建压缩包变量z z=zipfile.ZipFile(target,‘w‘) #遍历所有的文件 for back_dir in source: for root,filedirs,files in os.walk(back_dir): for file in files: z.write(os.path.join(root,file)) z.close() print(‘成功备份至‘,target)
以上是关于python 简单备份文件脚本v2.0的主要内容,如果未能解决你的问题,请参考以下文章