逐步提升程序质量的演变过程示例
admin
2023-07-31 00:38:47
0

如何编写高质量的程序呢? 在《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 。这个程序并不完美,但是可以完成最初的任务。注意到 生成编号使用了闭包,这是为了将生成编号的过程抽离出来成为一个可复用的过程,而这个过程无法预知需要生成怎样的列表,因此每次仅返回一个编号;程序如下:

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:

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...