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(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的主要内容,如果未能解决你的问题,请参考以下文章

python 简单备份文件脚本

常用python日期日志获取内容循环的代码片段

Python脚本的编写过程(例子--备份文件)

用python备份文件

Python脚本实现文件拷贝

Xcode 4.6 的备份代码片段