初次接触闭包,开阔了新视野呀,经过学习之后,写个小程序巩固了一下,功能类型Linux下的:grep XXXXX *
#!/sur/bin/python #---gbk--- import os import sys import getopt #how use def Usage(): print 'closure.py usage:' print '-p,--path: the file path.' print '-m, --format: the find string format' print '-o, --output: input an output verb' print '--foo: Test option ' print '--fre: another test option' #return string by format def make_filter(keep): def the_filter(file_name): file = open(file_name) lines=file.readlines() file.close() filter_doc= [i for i in lines if keep in i] return filter_doc return the_filter #get cmd def main(argv): Usage() try: opts,args=getopt.getopt(argv[1:],'p:m:',['path=','format=']) except getopt.GetoptError,err: print str(err) Usage() sys.exit(2) filenamelist=[] for o,a in opts: if o in ('-p','--path'): path=a filelist=os.listdir(path) for filename in filelist: if os.path.isdir(filename): print 'dir' elif os.path.isfile(filename): print filename filenamelist.append(filename) elif o in ('-m','--format'): format=a for f in filenamelist: print f,format filter = make_filter(format) filter_result = filter(f) for doc in filter_result: print f,doc.strip() if __name__=='__main__': main(sys.argv)
注释不多,在这描述一下, 从命令行获取了参数,参数通过-X的形式输入,从参数中获得了路径和所要匹配的字符串,调用
os.listdir(path)获得路径中文件的列表,然后遍历列表中的文件,打开每个文件,搜索所要的字符串,把字符串所在行计入结果列表中,打印,OK