白本羽 发表于 2021-4-20 15:29:38

文件的课后作业第4题

import os
dict1 = {}
line = 0
position = 0
list1 = []
def search_file(keyword, confirm):
   
    if confirm == 'YES':
      for each in os.listdir(os.curdir):
            line = 0                            #初始化行数,列表,位置
            list1.clear()
            position = 0
            
            if os.path.isdir(each):             #递归判断是否是目录,并返回上一级目录
                search_file(keyword,confirm)
                os.chdir(os.pardir)
               
            f = open(os.getcwd()+os.sep+each)    #打开文件,判断keyword是否存在文档中
         i f os.path.splitext(each) == '.txt' and keyword in f.read():
                print('在文件【%s】中找到关键字【%s】'%(each,keyword))
               
                for each_line in f:         #逐行判断在哪,并存储位置
                  line += 1
                  if keyword in each_line:
                        while keyword in each_line:          #多个关键词要用到列表
                            position += each_line.index(keyword)
                            list1.append(position)
                        dict1.setdefault(line,list1)                     #存到字典中
                print('关键字出现在第%s行,第%s个位置'%(dict1.keys(),dict1.values()))
            f.close()

            
keyword = input('请将该脚本放于待查找的文件夹内,输入关键字:')
confirm = input('请问是否需要打印关键字【%s】在文件中的具体位置(YES/NO):' %(keyword))
list1=search_file(keyword, confirm)

题目大意:找到在py文件所在目录下(遍历所有目录)的所有txt文件里的输入的关键词并返回行数和位置
卡在了递归那行,无限重复同样的两个print{:5_99:} {:5_99:} {:5_99:} ,

不能懒 发表于 2021-4-20 20:23:53

不知道是不是缩进问题,哈哈哈

白本羽 发表于 2021-4-20 22:38:07

搞了一堆,现在变成不输出位置了,无论怎么都没有,这从文件里读取出来的好像不是字符串,不能用in判断,只会返回空值
for each_line in f:
                        line += 1
                        if keyword in each_line:
                            while keyword in each_line:
                              position += each_line.index(keyword)
                              list1.append(position)
                            dict1.setdefault(line,list1)
                            print('关键字出现在第%s行,第%s个位置'%(dict1.keys(),dict1.values()))
页: [1]
查看完整版本: 文件的课后作业第4题