自动备份文件及文件夹

我们在写软件或做其他项目的时候,总是担心文件被损坏或者丢失,所以每次改完程序都会把整个文件夹压缩一个ZIP文件,在压缩ZIP文件的时候,我希望保存不同的版本,希望ZIP文件名每次创建时都有变化,我记录修改了什么。

列如 backup project_1.zip,backup_project_2.zip 等等,这些都可以用手工完成,但每次可能不小心弄错了ZIP文件的编号,或者忘记了去备份。我们写一个简单的程序来完成这烦人的工作。

实现思路

第一步:定义一个backupTozip( )函数,它只接收一个参数,即folder,这个参数是一个字符串路径,指向需要备份的文件夹。该函数将决定它创建什么样的文件名,遍历folder文件夹,将每一个文件夹的子文件和文件添加到ZIP文件中。

1.命名这个ZIP文件,使用folder的绝对路径得到压缩ZIP的名字,列如:文件夹是"/Users/zou/Desktop/zip",那么ZIP文件的名称应该是 zip_N.zip,第一次运行程序时N=1,以此类推。

2.通过检查zip_1.zip是否存在,再检查zip_2.zip是否存在,以此类推,确定N是什么,用number变量来表示N,在循环内不断增加,并调用 os.path.exsits( )来检查文件是否存在,第一个不存在的文件名会导致循环break。

代码如下:

<pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">importos
importzipfile


defbackupToZip(folder):

Backup the entire contents of "folder" into a zip file.


folder= os.path.abspath(folder) # make sure folder is absolute

Figure out the filename this code should used based on

what files already exist.

number= 1
whileTrue:
zipFilename= os.path.basename(folder) +'_'+str(number) +'.zip'
ifnotos.path.exists(zipFilename):
break
number= number+1
</pre>

第二步:创建ZIP文件

既然新的ZIP文件的文件名保存zipFilename 变量中,你就可以调用zipfile.ZipFile( ),来创建ZIP文件,一定要传入'w'作为第二个参数,这样文件以写模式打开。

<pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"># Create the zip file.
print('Creating %s...'%(zipFilename))
backupZip= zipfile.ZipFile(zipFilename, 'w')

</pre>

第三步:遍历目录树并添加到ZIP文件

使用os.walk( )函数,列出文件夹以及自文件夹的每个文件,for循环中使用os.walk( ),在每次迭代中,它返回这次迭代的文件夹名称 , 这文件夹的子文件夹,以及文件夹的文件名。

第一个for循环将文件夹添加到ZIP文件,第二个for循环将遍历filenames列表中的每个文件,将每个文件也添加到ZIP文件中,生成的备份除外。

<pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"># Walk the entire folder tree and compress the files in each folder.
forfoldername, subfolders, filenamesinos.walk(folder):
print('Adding files in %s...'%(foldername))

Add the current folder to the ZIP file.

backupZip.write(foldername)

Add all the files in this folder to the ZIP file.

forfilenameinfilenames:
iffilename.startswith(os.path.basename(folder) +'_') andfilename.endswith('.zip'):
continue # don't backup the backup ZIP files
backupZip.write(os.path.join(foldername, filename))
backupZip.close()
print('Done.')
</pre>

源码如下:

程序运行后的结果:

用python写个自动备份软件相关推荐

  1. python软件界面-用Python写一个语音播放软件

    原标题:用Python写一个语音播放软件 单位经常使用广播进行临时事项的通知(将文字转换为语音然后通过功放广播),但是市面上多数语音播放软件都是收费的,要么发音失真,要么不够稳定--经常出现莫名其妙的 ...

  2. python编写一个软件-python写一个随机点名软件的实例

    最近有个随机点名软件的需求,故写了一个,上代码:github地址 # -*- coding: utf-8 -*- # @Time : 18-12-31 下午4:21 # @Author : Felix ...

  3. python写软件实例-python写一个随机点名软件的实例

    最近有个随机点名软件的需求,故写了一个,上代码:github地址 # -*- coding: utf-8 -*- # @Time : 18-12-31 下午4:21 # @Author : Felix ...

  4. FtpCopy数据定时自动备份软件(FTP定时备份)

    1. 软件说明 FtpCopy是一款免费的FTP数据自动备份软件,如果FtpCopy对您有较大的帮助,欢迎捐赠我们,我们对您表示衷心的感谢! 如果有需求的话会一直更新下去,将软件做到极致! 有问题可直 ...

  5. python编写木马攻击_用Python写一个自动木马程序

    电脑作为大家日常办公的工具,最怕的一件事情之一就是被偷,当我们的电脑被盗的时候,不仅仅是电脑本身,更重要的是电脑存储的资料都会丢失.如何尽快的找回电脑需要我们想点办法,今天就教大家一个好的技巧,虽说不 ...

  6. ftp服务器 自动备份,FtpCopy数据定时自动备份软件(FTP定时备份)

    1. 软件说明 FtpCopy是一款免费的FTP数据自动备份软件,如果FtpCopy对您有较大的帮助,欢迎捐赠我们,我们对您表示衷心的感谢! 如果有需求的话会一直更新下去,将软件做到极致! 有问题可直 ...

  7. python加油代码_python入门教程NO.5 用python写个自动选择加油站的小程序

    本文涉及的python基础语法为:if条件分支 Python条件分支是通过一条或者多条语句的执行结果True或者False来决定是否执行相应的代码块. if单向条件语法结构 if 判断条件: 代码块 ...

  8. Python入门教程NO.5 用python写个自动选择加油站的小程序

    本文涉及的 python 基础语法为:if 条件分支 Python 条件分支是通过一条或者多条语句的执行结果 True或者 False来决定是否执行相应的代码块. if 单向条件语法结构 if 单向条 ...

  9. 用python写一个自动群发微信脚本

    使用 Python 写一个自动群发微信脚本需要使用微信第三方 API 来实现.推荐使用 itchat 库,它提供了简单易用的 API,可以方便地编写微信自动化脚本. 首先,你需要安装 itchat 库 ...

最新文章

  1. 51nod 1065 最小正字段和 解决办法:set存前缀和,二分插入和二分查找
  2. jquery插件制作
  3. windwos-sshfs
  4. 550 5.7.1 Client does not have permissions to send as this sender
  5. 十八般武艺玩转GaussDB(DWS)性能调优:总体调优策略
  6. 我们不生产代码,我们只是代码的搬运工
  7. 测试人生 | 三十而已,何需惧怕 年薪40W+涨薪幅度超40%
  8. Trisk:在 Flink 实现以 task 为中心的流处理动态 Reconfiguration 的 Control Plane
  9. zabbix-3.0.3 mysql表分区的方法
  10. 中值滤波器 median filter
  11. AutoPatchnbsp;warning:zfaprod.txtnbsp;do…
  12. mail163邮箱个人登录入口在哪里?
  13. python:打印三角形图案。
  14. 配置ST-GCN环境记录【Google colab】
  15. PMP之项目成本管理
  16. 【转】区块链:DeFi 的理论与实践
  17. JQuery获取扫描枪扫描的数据
  18. 深入理解HashMap的存储以及计算过程,提高HashMap使用效率
  19. ETL 部署和简单的例子
  20. 可编程 USB 转串口适配器开发板专用工具 S2STool 介绍

热门文章

  1. Vue2——v-on
  2. Cocos2dx游戏开发笔记23:《奇怪的大冒险》源码学习,附下载
  3. Kafka常用监控框架百科全书
  4. 软件产品登记测试网站,软件产品登记测试
  5. 漫画讲解Advantage-Actor-Critic(A2C)
  6. PhotoShop入门
  7. 最好的视频会议软件gotomeeting
  8. 点击qq或者微信对话框里面的文件跳转到自己的app时的文件路径问题
  9. Tampermonkey油猴-脚本插件
  10. 【PyCharm中文教程 02】PyCharm 社区版下载与安装