import os
def search_ext(start_file,key) :
os.chdir(start_file)
i=0
k=0
list=[]
list1=set()
try:
for each_file in os.listdir(os.curdir) :# 取得目录下的所有文件夹及文件列表,风险语句
ext = os.path.splitext(each_file)[1]# 把里面的元素分成两部分,一是文件名二是类型(包括文件夹:分完后第2部分为‘’。 如果风险语句成功过关会从这里继续
if ext=='.txt' :
f=open(os.getcwd() + os.sep + each_file) # 如果是 txt 文件就打开
for line in f.readlines():
i+=1
if key in line:
path1='在文件【'+os.getcwd() + os.sep + each_file+'】中找到关键字【'+key +'】\n' #存放路径
list1.add(path1)
k = line.find(key)
pos=[] #存位置
while k != -1: #在这一行中出现在多个key的位置存入pos[]
pos.append(k+1)
k=line.find(key,k+1) #从找到key的位置后再继续找 (找到最后会返回-1)
for j in pos:
path='关键字出现在【第' + str(i) + '行】第【' + str(j) + ' 】个位置\n' #存放行及位置
list.append(path)
pos=[] #在对应的for line in f.readlines() 清空,为判断下一行做准备
for c in list1: #打出含有key的文件
print(c)
for n in list: #打出 #打出含有key的行,含一行中有多个key
print(n)
list=[] #清空
list1.clear()
f.close()
if os.path.isdir(each_file):# 判断是否为文件夹
#os.chdir(os.getcwd()+os.sep+each_file) #必需将当前目录改为文件夹下的目录*********
start_file=os.getcwd()+os.sep+each_file
search_ext(start_file,key) # 递归调用
os.chdir(os.pardir) # 递归调用后切记返回上一层目录。os.pardir 上层目录(父目录)
except: # 如果风险语句未能过关会跳来这里继续
os.chdir(os.pardir)
start_file=input('\n请输入你的目录:')
key = input('\n请输入要搜索的关键字:')
search_ext(start_file,key)