上一次用Python的2种方法遍历文件,这次参考了一下Python Promgramming 3rd 里面的代码,用os.path.walk来遍历文件,并且搜索文件里面的内容
search_content.py
windows调试通过!
search_content.py
import
os, sys
listonly = False
skipexts = [ ' .gif ' , ' .exe ' , ' .pyc ' , ' .o ' , ' .a ' , ' .dll ' , ' .lib ' , ' .pdb ' , ' .mdb ' ] # ignore binary files
def visitfile(fname, searchKey): # for each non-dir file
global fcount, vcount
try :
if not listonly:
if os.path.splitext(fname)[ 1 ] in skipexts:
pass
elif open(fname).read().find(searchKey) != - 1 :
print ' %s has %s ' % (fname, searchKey)
fcount += 1
except : pass
vcount += 1
def visitor(args, directoryName,filesInDirectory): # called for each dir
for fname in filesInDirectory:
fpath = os.path.join(directoryName, fname)
if not os.path.isdir(fpath):
visitfile(fpath,args)
def searcher(startdir, searchkey):
global fcount, vcount
fcount = vcount = 0
os.path.walk(startdir, visitor, searchkey)
if __name__ == ' __main__ ' :
root = raw_input( " type root directory: " )
key = raw_input( " type key: " )
searcher(root,key)
print ' Found in %d files, visited %d ' % (fcount, vcount)
listonly = False
skipexts = [ ' .gif ' , ' .exe ' , ' .pyc ' , ' .o ' , ' .a ' , ' .dll ' , ' .lib ' , ' .pdb ' , ' .mdb ' ] # ignore binary files
def visitfile(fname, searchKey): # for each non-dir file
global fcount, vcount
try :
if not listonly:
if os.path.splitext(fname)[ 1 ] in skipexts:
pass
elif open(fname).read().find(searchKey) != - 1 :
print ' %s has %s ' % (fname, searchKey)
fcount += 1
except : pass
vcount += 1
def visitor(args, directoryName,filesInDirectory): # called for each dir
for fname in filesInDirectory:
fpath = os.path.join(directoryName, fname)
if not os.path.isdir(fpath):
visitfile(fpath,args)
def searcher(startdir, searchkey):
global fcount, vcount
fcount = vcount = 0
os.path.walk(startdir, visitor, searchkey)
if __name__ == ' __main__ ' :
root = raw_input( " type root directory: " )
key = raw_input( " type key: " )
searcher(root,key)
print ' Found in %d files, visited %d ' % (fcount, vcount)
windows调试通过!