如何编写高质量的程序呢? 在《Web服务端软件的的服务品质概要》阐述了程序的常见质量属性及实现策略方法,本文将通过一个 Python 实现的图片文件批量重命名工具来演示如何逐步提升程序质量。
图片文件批量重命名工具实现的功能是:将指定目录 /home/user/path/to/photos/(xxx.png,yyy.png) 下的图片批量重命名为 prefix0001.png, prefix0002.png, …
雏形
首先,可以编写出一个基本可用的程序 batchrename_basic.py 。这个程序并不完美,但是可以完成最初的任务。注意到 生成编号使用了闭包,这是为了将生成编号的过程抽离出来成为一个可复用的过程,而这个过程无法预知需要生成怎样的列表,因此每次仅返回一个编号;程序如下:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 | # -*- coding: cp936 -*- import os import os.path as PathUtil def createDesignator(num, bits): return str(num).zfill(bits) def number_generator(start_num=0, bits=4): start = [] start.append(start_num) def inner(): start[0] = start[0] + 1 return createDesignator(start[0], bits) return inner def batchrename(dir_path, prefix=\”IMG_\”,generator_func=number_generator()): \’\’\’ rename files (such as xxx.[jpg, png, etc]) in the directory specified by dir_path to [prefix][designator].[jpg, png, etc], designator is generated by generator_func \’\’\’ names = os.listdir(dir_path) for filename in names: old_filename = PathUtil.join(dir_path,filename) if PathUtil.isfile(old_filename)==True: newname=prefix.upper() + generator_func() + \’.\’ + getFileSuffix(filename) os.rename(old_filename,PathUtil.join(dir_path,newname)) def getFileSuffix(filename): try: sep_ind = filename.index(\’.\’) return filename[sep_ind+1:] except ValueError: return None def testGetFileSuffix(): assert getFileSuffix(\”good.jpg\”) == \”jpg\” assert getFileSuffix(\”good\”) is None print \”testGetFileSuffix Passed.\” def testNumberGenerator(): geneNums = [] generator = number_generator() for i in range(10): geneNums.append(generator()) assert geneNums[0] == \’0001\’ assert geneNums[1] == \’0002\’ assert geneNums[9] == \’0010\’ print \’testNumberGenerator Passed.\’ if __name__ == \’__main__\’: testGetFileSuffix() testNumberGenerator() dir_path = \’/home/lovesqcc/setupdir/scitools/pic/mmnet/beauty\’ batchrename(dir_path, prefix=\”beauty_\”) |
健壮性
健壮性体现了程序应对错误的能力。一个需要网络连接的 APP 在网络正常的情况下运行流畅,如果没有网络呢? 就必须告知用户先连接到网络才行。或者采用输入自动纠错。比如在搜索引擎里搜索 jquery, 不小心写成了 jqeury 。搜索引擎会提示是否需要搜索的是 jquery。在此例中,当路径不存在时,就会报错。
123456 | Traceback (most recent call last): File \”batchrename_robust.py\”, line 57, in batchrename(dir_path, prefix=\”beauty_\”) File \”batchrename_robust.py\”, line 21, in batchrename names = os.listdir(dir_path)OSError:n-h\”> = os.listdir(dir_path)OSError:步提升程序质量。
图片文件批量重命名工具实现的功能是:将指定目录 /home/user/path/to/photos/(xxx.png,yyy.png) 下的图片批量重命名为 prefix0001.png, prefix0002.png, …
雏形 首先,可以编写出一个基本可用的程序 batchrename_basic.py 。这个程序并不完美,但是可以完成最初的任务。注意到 生成编号使用了闭包,这是为了将生成编号的过程抽离出来成为一个可复用的过程,而这个过程无法预知需要生成怎样的列表,因此每次仅返回一个编号;程序如下:
健壮性 健壮性体现了程序应对错误的能力。一个需要网络连接的 APP 在网络正常的情况下运行流畅,如果没有网络呢? 就必须告知用户先连接到网络才行。或者采用输入自动纠错。比如在搜索引擎里搜索 jquery, 不小心写成了 jqeury 。搜索引擎会提示是否需要搜索的是 jquery。在此例中,当路径不存在时,就会报错。
|
下一篇:关于进程监控及自动启动