1,結合grep的例項,考慮處理子目錄的情況:
[html]
#!/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')
結果顯示:
[html]
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,是為了方便除錯最笨的方法。
遇到問題總結:
os.sep是乙個分割符的標誌,
os.path.isdir是驗證是否存在子目錄的函式
迭代的巧妙運用,
in的使用:
[html]
>>> a='12345'
>>> 1 in a
traceback (most recent call last):
file "", line 1, in
typeerror: 'in ' 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 in a
true
習題2:編寫類實現棧的功能----filo:
[html]
#!/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
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()
結果顯示:
[html]
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中類的使用注意事項。
作者:chen861201
python課後習題 8 7 8 8
8 7 編寫乙個名為make album 的函式,它建立乙個描述 的字典。這個函式應接受歌手的名字和 名,並返回乙個包含這兩項資訊的字典。使用這個函式建立三個表示不同 的典,並列印每個返回的值,以核實字典正確地儲存了 的資訊。給函式make album 新增乙個可選形參,以便能夠儲存 包含的歌曲數。...
python課後習題 10 4
10 4 訪客名單 編寫乙個while 迴圈,提示使用者輸入其名字。使用者輸入其名字後,在螢幕上列印一句問候語,並將一條訪問記錄新增到檔案guest book.txt 中。確保這個檔案中的每條記錄都獨佔一行。file name guest book.txt active true while act...
python課後習題 10 6 10 7
10 6 加法運算 提示使用者提供數值輸入時,常出現的乙個問題是,使用者提供的是文字而不是數字。在這種情況下,當你嘗試將輸入轉換為整數時,將引發typeerror 異常。編寫乙個程式,提示使用者輸入兩個數字,再將它們相加並列印結果。在使用者輸入的任何乙個值不是數字時都捕獲typeerror 異常,並...