数月前有家客户要求我采用python开发个项目。我琢磨着,最快捷的开发方式无非是利用其他编程语言方面的知识把现有的同类脚本程序改成python版本的不就得了。经过一番研究,我这才发现,python和Perl太相象了,后者我可是门儿清。要不你就先读读Perl版本的程序脚本。
这里我就不说具体的转换过程是怎么回事了,主要把python版本的脚本程序梳理一下,让读者了解这种脚本语言的关键要素。我选用的脚本导入了一个包含3000条目的符号分界文件,抽取出条目的说明字段(变长的),然后把它们转换为30个字符长的字段,最后重新写入该文件,脚本的全部代码如程序清单A所示。
注意
python语言中的循环和流程控制没有对应的终止语句,这可能会引起一些不必要的混淆。我已经在程序清单中加入了一些注释,由此指出代码块在哪里终止。这样做有助于更好地组织和阅读程序代码。
import string #使用字符串库
import re #使用正则表达式库
脚本的头两行代码导入字符串和正则表达式类。python是一种面向对象的脚本语言,通过导入类库可以大大提高代码的扩展性和模块性。
inputfile = "c:WorkCNETInventory.txt"
#把定界文件名设置为inputfile。
outputfile = "c:WorkCNETinv.txt"
#把输出文件名设置为outputfile。
上面的代码演示了python的字符串变量定义(比如variable_name =
“string”)。python语句在行末终止,注释则以# 符号开头。
f = open(inputfile)
#打开inputfile供读取数据
o = open(outputfile, "w")
#打开outputfile供写入数据
以上两行代码创建了导入和导出两个文件所必要的文件句柄。所谓文件句柄其实就是一种python用来访问外部文件的数据结构。以上代码中的open语句可以只有1个参数,也就是只读打开的文件;“w”则表示对文件的操作是写入。
while (1):
#处理输入文件
offset =0
#30个字符字段的偏移
line = f.readline()
#把当前行赋给line变量
if not line : break
#到文件末尾则退出循环
while语句执行循环块内包含的代码直到条件不满足。这里采用参数1是为了利用if语句从循环块内部退出while循环。python只用语句缩排形成代码块,所以你要特别注意代码的可读性。
f.readline()语句执行了文件句柄对象的readline方法。该方法返回一个包含文件当前行的字符串,同时把指针移到文件中的下一行。当循环读到文件的最后一行时,指针指向。语句“if not line : break”用来退出循环,此时line将等于文件末尾的null,所以循环据此判断而退出。
line = line.rstrip()
#删除换行字符(以及结尾的空格)
cols = line.split(' ')
#用制表符(tab)分隔
rstrip方法从字符串对象中删除末尾的空格字符并返回处理之后的新字符串。split方法只有一个参数,也就是执行分隔任务的字符,然后返回字符串列表(或者数组)。这些方法是在脚本开头字符串类导入时而同时被引入的。必须指出,python语言中的对象类型并没有在语法上严格区分。对象类型通常就在声明变量的时候定义。