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)
时间: 2024-10-11 12:01:22

python 简单备份文件脚本v2.0的相关文章

python 简单备份文件脚本

整体思路 将要备份的目录列为一个列表,通过执行系统命令,进行压缩.备份. 这样关键在于构造命令并使用 os.system( )来执行,一开始使用zip 命令始终没有成功,后来发现Windows下并没有这个命令,还要安装GnuWin32项目,后来安装了7z,实现了使用系统命令进行压缩. 压缩命令 通过下载7z压缩,将7z.exe 7z,dll 加入系统环境变量目录,通过以下命令进行压缩.解压7z a test.zip a.txt b.txt # 指定若干文件 7z a test.zip f:/te

python写一个通讯录V2.0

python写一个通讯录step by step V2.0 引用知识 list + dict用于临时存储用户数据信息 cPickle用于格式化文件存取 依旧使用file来进行文件的存储 解决问题 1.操刀开始去做 原始代码 实现功能(可做模板) 1.判断输入内容是否在给出的menu目录内,在的话,返回对应结果,不在就报错 2.调用os模块的exit功能 3.字典配合循环加上函数实现switch的功能 #!/usr/bin/env python #coding:utf8 #Author:zhuim

[python]糗百热点爬虫v2.0【15/4/21更新】

刚刚测试了糗百爬虫,结果第二天糗百的源代码就换格式了= = 改了下正则表达式,但是内容中存在的html转码还未匹配,不影响使用 #! -*- coding:utf-8 -*- #! usr/bin/python ''' #===================================================== # FileName: Spider_qb.py # Describe: 从糗百下载段子并依次播放 # Modifier: sunny # Since: 2015-04-

weblogic启动脚本v2.0

改动地方 1.在测试应用为用友NC6,因为NC的集群有master的概念,非master节点依赖于master,所以,对于此种情况,必须首先判定master正常启动,才能启动其他节点. 经项目测试,发现有时master端口打开后就去启动其他节点,有时会遇到master not ready的错误,因此,手动在master端口起来后增加sleep 20. 2.其他所有server因为没有依赖关系,所以,可以并行启动,减小启动时间. 3.使用函数处理启动过程和判断端口打开过程,有效较少代码数量. #!

[简明python教程]学习笔记之编写简单备份脚本

[[email protected] 0503]# cat backup_ver3.py #!/usr/bin/python #filename:backup_ver3.py import os import time #source source=['/root/a.sh','/root/b.sh','/root/c.sh'] #source='/root/c.sh' #backup dir target_dir='/tmp/' today=target_dir+time.strftime('

一个用python简单的封装了aria2的jsonrpc中adduri的脚本

aria2是一个十分牛逼的下载神器,有时候项目需要一个很牛逼的下载中间件的话,aria2是一个不错的选择.其中支持jsonrpc和websocket的特性尤其诱人.但是python用起来还是有点不爽,所以简单封装一下aria2的jsonrpc. 所以,用python简单的封装了aria2的jsonrpc中adduri的脚本. 使用起来非常简单,仅需要三行代码. from pyaria2 import Jsonrpc jsonrpc = Jsonrpc('localhost', 6800) res

同福脚本平台V2.0 源代码

武林外传 同福客栈脚本平台V2.0源码,Lua脚本支持,采用C++ Builder 6 编译,不提供更新方法,此源码仅供交流研究使用,如使用此源码产生的任何法律问题,与原作者无任何关系,责任自负! http://pan.baidu.com/s/1pJAzSQv

gtk+3.0的环境配置及基于gtk+3.0的python简单例子

/*********************************************************************  * Author  : Samson  * Date    : 06/25/2014  * Test platform:  *              Mint 15  *              GNU bash, version 4.2.45  * *************************************************

????双机热备数据库备份脚本 v2.1

Text /* THIS4.0 数据库备份脚本 [作者] Rulition QQ:7355157 [版本] v2.1 [修改] 2010年5月21日15:35:13 完成 2010年5月24日11:35:13 细节修改 2010年5月25日11:31:13 增加[完整备份]前的一致性检查 2010年5月27日10:31:13 检查差异备份的大小,避免过大文件影响差异备份. 2010年5月28日11:14:15 补备份时查看最近是否已做过完全备份. 2010年10月17日21:58:32 切换@备