在目錄中查詢指定的字串
阿新 • • 發佈:2019-01-26
# -*- coding: cp936 -*-
'''在python中查詢字串,如果檔案中包含指定的字串,
則將此字串所在的行號和檔名稱打印出來,不支援正則表示式,
演示了walk使用方法;
演示了fileinput使用方法'''
import os
# 使用walk來遍歷目錄
def processFiles(arg,dirpath,files):
'''walk函式的回撥函式,
查詢滿足條件的檔案,使用fileinput對檔案進行搜尋,
如果查詢到關鍵字,打印出行號和檔名稱'''
for f in files:
fname = os.path.join(dirpath,f)
if(os.path.isfile(fname)):
if os.path.splitext(fname)[1] =='.py':
import fileinput
import sys
# 使用fileinput來遍歷檔案,如果有Tk則將此【行號:檔名稱】插入搜尋結果列表框
for line in fileinput.input(fname):
# 在這裡使用vTextFind,查詢指定的字串
if line.find(root.vTextFind.get()) !=-1:
root.lbResults.insert(END,"[%d]:[%s]"% (fileinput.lineno(),fname))
def updateListbox(master):
'''搜尋按鈕的事件處理函式,
這個函式呼叫walk來遍歷目錄,並將搜尋結果插入列表框'''
print master.vDirSearched.get()
master.lbResults.delete(0,END)
os.path.walk(master.vDirSearched.get(),processFiles,'' )
from Tkinter import*
root = Tk()
# 建立搜尋路徑,並繫結變數,預設路徑為當前'.'
Label(root,text ='Directory to be searched').grid(row = 0,column = 0)
root.vDirSearched = StringVar()
root.vDirSearched.set('.')
root.etDirSearched = Entry(root,textvariable = root.vDirSearched)
root.etDirSearched.grid(row = 0,column =1)
# 建立要搜尋的字串,預設搜尋為'Tk'
Label(root,text ='text to find').grid(row =1,column = 0,stick = W)
root.vTextFind = StringVar()
root.vTextFind.set('Tk')
root.etTextFind = Entry(root,textvariable = root.vTextFind)
root.etTextFind.grid(row =1,column =1)
# 建立搜尋按鈕
root.btSearch = Button(root,
text ='Search',
command =lambda
arg1 = root:
updateListbox(arg1)
)
root.btSearch.grid(row =2,column = 0,columnspan =2,stick = E + W)
# 建立搜尋結果列表
root.lbResults = Listbox(root)
root.lbResults.grid(row =3,column = 0,columnspan =2,stick = E + W + N + S)
root.mainloop()
'''在python中查詢字串,如果檔案中包含指定的字串,
則將此字串所在的行號和檔名稱打印出來,不支援正則表示式,
演示了walk使用方法;
演示了fileinput使用方法'''
import os
# 使用walk來遍歷目錄
def processFiles(arg,dirpath,files):
'''walk函式的回撥函式,
查詢滿足條件的檔案,使用fileinput對檔案進行搜尋,
如果查詢到關鍵字,打印出行號和檔名稱'''
for f in files:
fname = os.path.join(dirpath,f)
if os.path.splitext(fname)[1] =='.py':
import fileinput
import sys
# 使用fileinput來遍歷檔案,如果有Tk則將此【行號:檔名稱】插入搜尋結果列表框
for line in fileinput.input(fname):
# 在這裡使用vTextFind,查詢指定的字串
if line.find(root.vTextFind.get())
root.lbResults.insert(END,"[%d]:[%s]"% (fileinput.lineno(),fname))
def updateListbox(master):
'''搜尋按鈕的事件處理函式,
這個函式呼叫walk來遍歷目錄,並將搜尋結果插入列表框'''
print master.vDirSearched.get()
master.lbResults.delete(0,END)
os.path.walk(master.vDirSearched.get(),processFiles,''
from Tkinter import*
root = Tk()
# 建立搜尋路徑,並繫結變數,預設路徑為當前'.'
Label(root,text ='Directory to be searched').grid(row = 0,column = 0)
root.vDirSearched = StringVar()
root.vDirSearched.set('.')
root.etDirSearched = Entry(root,textvariable = root.vDirSearched)
root.etDirSearched.grid(row = 0,column =1)
# 建立要搜尋的字串,預設搜尋為'Tk'
Label(root,text ='text to find').grid(row =1,column = 0,stick = W)
root.vTextFind = StringVar()
root.vTextFind.set('Tk')
root.etTextFind = Entry(root,textvariable = root.vTextFind)
root.etTextFind.grid(row =1,column =1)
# 建立搜尋按鈕
root.btSearch = Button(root,
text ='Search',
command =lambda
arg1 = root:
updateListbox(arg1)
)
root.btSearch.grid(row =2,column = 0,columnspan =2,stick = E + W)
# 建立搜尋結果列表
root.lbResults = Listbox(root)
root.lbResults.grid(row =3,column = 0,columnspan =2,stick = E + W + N + S)
root.mainloop()