在目录中查找指定的字符串

#  -*- 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()
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值