1,结合grep的实例,考虑处理子目录的情况:
#!/usr/bin/python #coding=utf-8 #filename:cdcGrep.py import os def cdcGreper(cdcpath,keyword): filelist=os.listdir(cdcpath) for cdc in filelist: if os.path.isdir(cdc): filename=cdcpath+os.sep+cdc print '%s 是子目录 ' % filename cdcGreper(filename,keyword) print '执行迭代函数' elif '.txt' in cdc: print '找到目标文件,准备读取' cdcfile=open(cdcpath+os.sep+cdc) for line in cdcfile.readlines(): if keyword in line: print line if __name__=='__main__': cdc=cdcGreper('/home/zhouqian/python','test')结果显示:
zhouqian@zhou:~/python$ python cdcGrep.py 找到目标文件,准备读取 ./ ['class'] ['getoptTest.py', 'value_keys.py', 'text.txt', 'cdctool.py', 'test.txt', 'cdctoolTest.py', 'cdWalk.py', '.getoptTest.py.swp', 'cdWalk.pyc'] /home/zhouqian/python/class 是子目录 找到目标文件,准备读取 test test test 执行迭代函数 找到目标文件,准备读取 test说明下这里面友好多的print,是为了方便调试最笨的方法。
>>> a='12345' >>> 1 in a Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'in <string>' requires string as left operand, not int >>> '1' in a True >>> a=(1,2,3,4) >>> 1 in a True >>> a=['1','2','3'] >>> 1 in a False >>> '1' in a True >>> a={1:11,2:33} >>> 1 in a True
习题2:编写类实现栈的功能----FILO:
#!/usr/bin/python #coding=utf-8 #filename:MyStack.py class MyStacker(object): ''' mystack 自定义栈,主要的操作put(),get(),isEmpty() ''' def __init__(self,max): '''初始化栈头指针和清空栈''' self.head=-1 self.max=max self.stack=list()#这里使用list列表来存储数据 for i in range(self.max): self.stack.append(0)#这里是初始化stack的长度,也就是分配存储空间 def put(self,item): #首先判断是否超出了栈的长度 if self.head>=self.max: return '栈已满,请先删除部分数据' else: self.head+=1 self.stack[self.head]=item print 'put %s successfully' %item def get(self): print '进入get函数中' if self.head<0: return '栈已空,请先插入数据' else: print '判断通过' self.head-=1 print self.head return self.stack[self.head+1]#此处这样写的目的是为了能够取到我们需要的那个数据,并且self.head还要减1 def isEmpty(self): if self.head<-1: print '该栈为空' return True else: print '该栈不为空,数据为%s' %self.stack return False if __name__=='__main__': mystack=MyStacker(10) mystack.put('a') mystack.put('chen') mystack.put('zhou') print mystack.get() print '##########' mystack.isEmpty() print mystack.get()结果显示:
zhouqian@zhou:~/python$ python MyStack.py put a successfully put chen successfully put zhou successfully 进入get函数中 判断通过 1 zhou ########## 该栈不为空,数据为['a', 'chen', 'zhou', 0, 0, 0, 0, 0, 0, 0] 进入get函数中 判断通过 0 chen遇到的问题总结:
实现FILO时选择数据结构:我们这里选择列表,主要是它能删能插,刚开始想用tuple的,可是它的数据在定义完后就没法在修改了。所以只能使用list来做
list的基本操作,检索的使用List 可以作为以 0 下标开始的数组。任何一个非空 list 的第一个元素总是 li[0]
python中类的使用注意事项。