设为首页 加入收藏

TOP

从0开始的Python学习013编写一个Python脚本(一)
2019-04-01 12:09:33 】 浏览:110
Tags:开始 Python 学习 013 编写 一个 脚本

通过之前的学习我们已经了解了Python的很多基础运用了,现在我们尝试着做一个有使用价值的小脚本。

问题


需求:

我想要一个可以给我备份重要文件的程序。

需求分析:

首先文件是有存储路径,文件的路径和备份的路径,是一个文件还是很多文件,备份成什么样子的文件?

简单的分析过后,大概制定实现步骤:

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

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

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

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

解决方案


当我们完成基本的程序设计的时候,就可以编写我们的代码了,这就是需求的实现过程。

版本一


 

import os
import time

#1.带备份文件路径或者完整地址加文件名
source =  ['E:\python\\']#\\被转义

#2.文件备份地址
target_dir = 'E:\\backup\\'

#3.备份后的文件路径加文件名
target = target_dir + time.strftime('%Y%m%d%H%M%S') + '.rar'

#4.使用zip命令压缩文件zip命令有一些选项和参数。-q选项用来表示zip命令安静地工作。-r选项表示zip命令对目录递归地工作,即它包括子目录以及子目录中的文件。
zip_command = "zip -qr {0} {1}".format(target, ''.join(source))

#5.通过给系统传递参数来执行压缩命令(压缩使用的是WinRAR所带文件rar.exe来执行压缩)
if os.system(zip_command) == 0:#如果命令成功运行,它返回0,否则它返回错误号。
    print ('Successful backup to', target)
else:
    print ('Backup FAILED') 

运行结果

当然程序是可以不断优化的,没有最优只有更优。

测试

现在我们做的就是程序的测试,在这个阶段首先查看程序是否能正常运行,其次是查看运行结果是否与需求一致,如果和我们的预期结果不一致,我们就要调试我们的程序,从而消除“bug”。

工作原理


我们使用了os和time模块,所以我们引用他们import。之后我们在source列表中指定需要备份的文件和目录。目标目录是我们想要存储备份文件的地方,它由target_dir变量指定。zip归档的名称是目前的日期和时间(可改的),我们使用time.strftime()函数获得。它还包括.zip扩展名,将被保存在target_dir目录中。

time.strftime()函数需要我们在上面的程序中使用的那种制定。%Y会被无世纪的年份所替代。%m会被01~12之间的一个是十进制月份数替代,其他以此类推。

我们使用加法操作符来连接字符串,把两个字符串连接在一起返回一个新的字符串。通过这个方式我们创建目标文件的名称。接着我们创建zip_command字符串,它包含我们将要执行的命令。你可以在DOS中运行它,检验是否正确。

zip命令有一些选项和参数。-q选项用来表示zip命令安静地工作。-r选项表示zip命令对目录递归地工作,即它包括子目录以及子目录中的文件。两个选项可以组合成缩写形式-qr。选项后面跟着待创建的zip归档的名称,然后再是待备份的文件和目录列表。我们使用已经学习过的字符串join方法把source列表转换为字符串。{0}表示target,{1}表示''.join(source)。

最后,我们使用os.system函数 运行 命令,利用这个函数就好像在 系统 中运行命令一样。即在shell中运行命令——如果命令成功运行,它返回0,否则它返回错误号。根据命令的输出,我们打印对应的消息,显示备份是否创建成功。

版本二


第一个脚本已经可以工作了,然而我们还可以对他进行优化,使它更强大。

优化之一是采用更好的文件名机制——使用 时间 作为文件名,而当前的 日期 作为目录名,存放在主备份目录中。这样做的一个优势是你的备份会以等级结构存储,因此它就更加容易管理了。另外一个优势是文件名的长度也可以变短。还有一个优势是采用各自独立的文件夹可以帮助你方便地检验你是否在每一天创建了备份,因为只有在你创建了备份,才会出现那天的目录。

import os
import time

#1.带备份文件路径或者完整地址加文件名
source =  ['E:\python\\']

#2.文件备份地址
target_dir = 'E:\\backup\\'

#3.使用日期创建一个文件路径
today = target_dir + time.strftime('%Y%m%d')
now = time.strftime('%H%M%S')

#4.判断这个路径是否存在,不存在新建路径
if not os.path.exists(today):
    os.mkdir(tody)
    print('Successfully created directory',tody)

#5.备份后的文件路径加文件名os.sep = \\
target = today + os.sep + now + '.zip'


#5.使用zip命令压缩文件zip命令有一些选项和参数。-q选项用来表示zip命令安静地工作。-r选项表示zip命令对目录递归地工作,即它包括子目录以及子目录中的文件。
zip_command = "zip -qr {0} {1}".format(target, ''.join(source))

#6.通过给系统传递参数来执行压缩命令(压缩使用的是WinRAR所带文件rar.exe来执行压缩)
if os.system(zip_command) == 0:
    print ('Successful backup to', target)
else:
    print ('Backup FAILED') 

运行结果

两个程序的大部分是相同的。改变的部分主要是使用os.exists函数检验在主备份目录中是否有以当前日期作为名称的目录。如果没有,我们使用os.mkdir函数创建。

注意os.sep变量的用法——这会根据你的操作系统给出目录分隔符,即在Linux、Unix下它是'/',在Windows下它是'\\',而在Mac OS下它是':'。使用os.sep而非直接使用字符,会使我们的程序具有移植性,可以在上述这些系统下工作。

版本三


import os
import time

#1.带备份文件路径或者完整地址加文件名
source =  ['E:\python\\']

#2.文件备份地址
target_dir = 'E:\\backup\\'

#3.使用日期创建一个文件路径
today = target_dir + time.strftime('%Y%m%d')
now = time.strftime('%H%M%S')

#4.从用户处获取注释以创建zip文件的名称 
comment = input('Enter a comment --> ')
if len(comment) == 0: # 检查用户输入
    targe
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Excel文件读取的两种方式 下一篇python3 json数据格式的转换(dum..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目