码迷,mamicode.com
首页 > 编程语言 > 详细

python 简单备份文件脚本v2.0

时间:2017-11-05 23:36:55      阅读:354      评论:0      收藏:0      [点我收藏+]

标签:允许   def   input   全面   技术   follow   成功   strong   用户   

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(rD:\backup\te.zip,w)
>>> z.write(rD: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

标签:允许   def   input   全面   技术   follow   成功   strong   用户   

原文地址:http://www.cnblogs.com/liuweizhuang/p/7787732.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!