简明Python教程学习笔记_5_解决问题

问题

我提出的问题是: 我想要一个可以为我的所有重要文件创建备份的程序。

尽管这是一个简单的问题,但是问题本身并没有给我们足够的信息来解决它。进一步的分析是必需的。例如,我们如何确定该备份哪些文件?备份保存在哪里?我们怎么样存储备份?

在恰当地分析了这个问题之后,我们开始设计我们的程序。我们列了一张表,表示我们的程序应该如何工作。对于这个问题,我已经创建了下面这个列表以说明 如何让它工作。如果是你设计的话,你可能不会这样来解决问题——每个人都有其做事的方法,这很正常。

  1. 需要备份的文件和目录由一个列表指定。

  2. 备份应该保存在主备份目录中。

  3. 文件备份成一个zip文件。

  4. zip存档的名称是当前的日期和时间。

  5. 我们使用标准的zip命令,它通常默认地随Linux/Unix发行版提供。Windows用户可以使用Info-Zip程序。注意你可以使用任何地存档命令,只要它有命令行界面就可以了,那样的话我们可以从我们的脚本中传递参数给它。

版本一

#!/usr/bin/python
# Filename: backup_ver4.pyimport os
import time# 1. The files and directories to be backed up are specified in a list.
source = ['/home/swaroop/byte', '/home/swaroop/bin']
# If you are using Windows, use source = [r'C:\Documents', r'D:\Work'] or something like that# 2. The backup must be stored in a main backup directory
target_dir = '/mnt/e/backup/'  # Remember to change this to what you will be using# 3. The files are backed up into a zip file.
# 4. The current day is the name of the subdirectory in the main directory
today = target_dir + time.strftime('%Y%m%d')
# The current time is the name of the zip archive
now = time.strftime('%H%M%S')# Take a comment from the user to create the name of the zip file
comment = raw_input('Enter a comment --> ')
if len(comment) == 0:  # check if a comment was enteredtarget = today + os.sep + now + '.zip'
else:target = today + os.sep + now + '_' + \comment.replace(' ', '_') + '.zip'# Notice the backslash!# Create the subdirectory if it isn't already there
if not os.path.exists(today):os.mkdir(today)  # make directoryprint 'Successfully created directory', today# 5. We use the zip command (in Unix/Linux) to put the files in a zip archive
zip_command = "zip -qr '%s' %s" % (target, ' '.join(source))# Run the backup
if os.system(zip_command) == 0:print 'Successful backup to', target
else:print 'Backup FAILED'

输出

$ python backup_ver4.py
Enter a comment --> added new examples
Successful backup to /mnt/e/backup/20041208/082156_added_new_examples.zip$ python backup_ver4.py
Enter a comment -->
Successful backup to /mnt/e/backup/20041208/082316.zip

它如何工作

这个程序现在工作了!让我们看一下版本三中作出的实质性改进。我们使用raw_input函数得到用户的注释,然后通过len函数找出输入的长度以检验用户是否确实输入了什么东西。如果用户只是按了回车(比如这只是一个惯例备份,没有做什么特别的修改),那么我们就如之前那样继续操作。

然而,如果提供了注释,那么它会被附加到zip归档名,就在.zip扩展名之前。注意我们把注释中的空格替换成下划线——这是因为处理这样的文件名要容易得多。

但是它仍然有进一步改进的空间。比如,你可以在程序中包含 交互 程度——你可以用-v选项来使你的程序更具交互性。

另一个可能的改进是使文件和目录能够通过命令行直接传递给脚本。我们可以通过sys.argv列表来获取它们,然后我们可以使用list类提供的extend方法把它们加到source列表中去。

我还希望有的一个优化是使用tar命令替代zip命令。这样做的一个优势是在你结合使用targzip命令的时候,备份会更快更小。如果你想要在Windows中使用这些归档,WinZip也能方便地处理这些.tar.gz文件。tar命令在大多数Linux/Unix系统中都是默认可用的。Windows用户也可以下载安装它。

命令字符串现在将称为:

tar = 'tar -cvzf %s %s -X /home/swaroop/excludes.txt'% (target,' '.join(srcdir))

选项解释如下:

  • -c表示创建一个归档。

  • -v表示交互,即命令更具交互性。

  • -z表示使用gzip滤波器。

  • -f表示强迫创建归档,即如果已经有一个同名文件,它会被替换。

  • -X表示含在指定文件名列表中的文件会被排除在备份之外。例如,你可以在文件中指定*~,从而不让备份包括所有以~结尾的文件。

重要
最理想的创建这些归档的方法是分别使用zipfiletarfile。它们是Python标准库的一部分,可以供你使用。使用这些库就避免了使用os.system这个不推荐使用的函数,它容易引发严重的错误。
然而,我在本节中使用os.system的方法来创建备份,这纯粹是为了教学的需要。这样的话,例子就可以简单到让每个人都能够理解,同时也已经足够用了。  





本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/497241.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开始研究Community Server,转贴一点东西】Community Server资料收集

Community Server学习资料 uGoer 系列文章 Community Server专题一:概述Community ServerCommunity Server专题二:体系结构Community Server专题:附件(DOC&PPT)--2005年10月10日更新Community Server专题三:HttpModuleCommuni…

python实现RSA算法,对数据进行加密认证

RSA算法RSA一、数学原理二、实现代码1 生成素数2 生成秘钥3 对数据进行加密、解密总结RSA RSA是一种非对称加密体制,由公钥和私钥组成,数学原理是实数域的模余法。在使用私钥对数据进行加密后,可用公钥对数据进行解密。 在RSA算法中&#xf…

C++学习之路 | PTA乙级—— 1008 数组元素循环右移问题 (20分)(精简)

1008 数组元素循环右移问题 (20分) 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A ​0 ​​ A ​1 ​​ ⋯A …

他研究了5000家AI公司,说人工智能应用该这么做!

来源:公众号InfoQ编辑:陈思 Eva;视频剪辑:汪春良 概要:本文作者 Henry Shi是美国人工智能的博士,连续创业者,专注于 AI 领域的早期投资(AI List Capital管理合伙人)。无…

Replace Parameter with Methods(以函数取代参数)

对象调用某个函数,并将其结果传递给另一个函数 int basePrice quantity * itemPrice; double discountLevel getDiscountLevel(); double finalPrice discountPrice(basePrice, discountLevel); 重构:让参数接受者移除该项参数,并直接调…

简明Python教程学习笔记_6_面向对象编程

面向对象编程:https://www.liaoxuefeng.com/wiki/897692888725344/923030496738368面向对象高级编程:https://www.liaoxuefeng.com/wiki/897692888725344/9230305380126401、类、对象 类 和 对象 是面向对象编程的两个主要方面。 类 是创建一个 新类型&a…

C++学习之路 | PTA乙级—— 1009 说反话 (20分)(精简)

1009 说反话 (20分) 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字…

哈希值+非对称加密+网络+数字签名,你真的知道怎么给游戏充钱吗

前文 使用socket实现局域网不同主机通信 SHA256算法的实现和消息的哈希散列值计算 python实现RSA算法,对数据进行加密认证 文章目录数字签名与认证攻击类型算法选择实现流程总结数字签名与认证 什么是数字签名? 签名我们大家都知道,A在纸上签…

2017 年脑机接口研发热点回眸

来源:科技导报概要:脑机接口(brain-computer interface,BCI)通过解码人类思维活动过程中的脑神经活动信息,构建大脑与外部世界的直接信息传输通路,在神经假体、神经反馈训练、脑状态监测等领域有…

Visual Studio“Orcas”October 2006 CTP版下载

Visual Studio “Orcas” October 2006 CT版可以下载了,但这次Release的是一个虚拟机的镜像,所以需要在虚拟PC上运行,文件的大小是4150.5 MB,有点太大了。下载地址:http://www.microsoft.com/downloads/details.aspx?…

C++学习之路 | PTA乙级—— 1010 一元多项式求导 (25分)(精简)

1010 一元多项式求导 (25分) 设计函数求一元多项式的导数。(注:x ​n ​​ (n为整数)的一阶导数为nx ​n−1 ​​ 。) 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数…

简明 Python 教程学习笔记_7_文件操作(os、shutil、pathlib )

参考 :http://www.cnblogs.com/nulige/archive/2016/12/06/6037752.html 在很多时候,你会想要让你的程序与用户(可能是你自己)交互。你会从用户那里得到输入,然后打印一些结果。我们可以分别使用 raw_input 和 print 语…

地牢房间迷宫走廊生成(二),Python实现洪水法、完美迷宫

文章目录前言1 随机房间和房门2 生成走廊2.1生成迷宫2.4 使用循环改进2.3 走廊缩减2.3 走廊再简化总结前言 前面通过随机房间、房门,对房门寻路生成走廊。由于使用A星算法,寻到的是最短路径,这样生成的走廊过直和简单。如果需要生成弯曲的走廊…

Introduce Parameter Object(引入参数对象)

某些参数总是很自然地同时出现 重构:以一个对象取代这些参数

深度解析,马斯克最新发射的先进火箭

来源:环球时报概要:就在几个小时前,美国人成功发射了目前全世界运载能力最强的超级火箭——“猎鹰重型”。就在几个小时前,美国人成功发射了目前全世界运载能力最强的超级火箭——“猎鹰重型”。虽然中芯级火箭在回收过程中坠毁&a…

发现还是 True Image Server v8.1.941 比较好用

今天下了 True Image Server 9.1 并安装使用,发现9.1版本的用起来似乎更麻烦了,还是喜欢 8.1 的.于是卸载了 9.1 版本重新安装 8.1 版的 但是我发现 8.1 版本的安装使用时总是提示已经过期了,失效了.搞了半天&#xff…

C++学习之路 | PTA乙级—— 1011 A+B 和 C (15分)(精简)

1011 AB 和 C (15分) 给定区间 [−2 ​31 ​​ ,2 ​31 ​​ ] 内的 3 个整数 A、B 和 C,请判断 AB 是否大于 C。 输入格式: 输入第 1 行给出正整数 T (≤10),是测试用例的个数。随后给出 T 组测试用例,每组占一行,顺…

Encapsulate Downcast(封装向下转型)

某个函数返回的对象,需要由函数调用者执行向下转型(downcast) public Object lastReading() {return readings.lastElement(); } 重构:将向下转型动作移动到函数中。 public Reading lastReading() {return (Reading) readings…

简明Python教程学习笔记_8_异常

菜鸟教程 之 Python 异常处理:http://www.runoob.com/python/python-exceptions.html Python 一篇搞定所有的异常处理:https://www.cnblogs.com/wj-1314/p/8707804.html Python 捕捉详细异常堆栈的方法 Python 中使用 try except 的方法捕获异常&#…

咖啡的味道

转自http://bbs.21our.com/main.asp一直就这样的静静的呆着,看着人来人往,听着笑语悲歌,却什么也不想说,什么也不想做。  下午有段时间,莫名其妙的烦躁起来,脑袋绷的紧紧的,甚至有种要窒息的感…