小甲鱼第30课 课后第4题

小甲鱼第30课 课后第4题

输入指定目录及查找的文字,搜索txt中在第几行第几个位置,没有内套函数。

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)





你可能感兴趣的:(python)