上次说到写了个简单程序,准备输入不同的参数进行测试,从而观察压缩比率和参数的大概关系,压缩对象是我的程序。原本打算用batch批处理,但一想到可能有不少变量,总觉得batch很麻烦,没有bash shell之类来得方便。windows下没试过用shell脚本,忽然想起之前装了python,这些工作应该都可以用python解决。于是找了几本电子书,快餐式地边学边用。
经过努力,弄出了个这样的脚本,可以说是利用python语法和库的一个批处理:
import os
for para_lc in range(0,8+1):
for para_lp in range(0,4+1):
for para_pb in range(0,4+1):
for para_dsi in range(0,27+1):
fn_origin = 'file.in'
fn_lzw = 'file' + '_lc{0}_lp{1}_pb{2}_dsi{3}'.format(para_lc, para_lp, para_pb, para_dsi) + '.out'
fn_unlzw = fn_lzw + '.in'
os.spawnl(os.P_WAIT, 'LZWStudyer.exe', '--encode-lc {2} --encode-lp {3} --encode-pb {4} --encode-dsi {5} --file-in {0} --file-out {1}'.format(fn_origin, fn_lzw, para_lc, para_lp, para_pb, para_dsi))
#end of for para_dsi
#end of for para_pb
#end of for para_lp
#end of for para_lc
这算是我第一个python程序了,实现了根据不同参数组合运行程序,并把结果分别输出到一堆按参数命名文件的功能。 显然,这个脚本生成了6300个文件.....
为了更好地进行分析,我又写了一个脚本
import os, sys, glob
StatList = list()
for FileName in glob.glob('*.out'):
FileStat = os.stat(FileName)
(name,ext) = os.path.splitext(FileName)
(postname,lc,lp,pb,dsi) = (elem for elem in name.split('_'))
StatList.append([FileStat.st_size, lc[2:], lp[2:], pb[2:], dsi[3:]]);
with open('LZWEncStatResult.dat', mode='w', encoding='utf-8') as FileResult:
for elem in StatList:
result = '{0}/t{1}/t{2}/t{3}/t{4}/n'.format(elem[0], elem[1], elem[2], elem[3], elem[4])
FileResult.write(result)
这回把参数组合和输出文件大小都列在一个表格里,可以用excel之类打开排序,或者用matlab之类画图处理。
总的来说,这两个脚本都挺简单的,主要是语法和库的使用。要想用好python增加工作效率,蜻蜓点水式的学习是不行的,还得打好基础,系统地去学。当然,关键还是要多用,熟能生巧。
经过了简单的测试,下一步就是要把解压部分代码融入到我现有的工程里面去了。(待续)