杨东明 发表于 2021-6-26 17:06:14

请问代码为啥检测不出子文件夹里的文本。。

import os

def test1(path,target):
    os.chdir(path)
    list1 = os.listdir('.')
    for each in list1:
      tuple1 = os.path.splitext(each)
      if not os.path.isdir(each) and tuple1 =='.txt':
            file_dict = dict()# 创建空的字典
            f = open(os.path.join(path,each),encoding='utf-8')
            count1 = 0 #行数
            for file_content in f:
                list2 = []
                count1 += 1
                index1 = file_content.find(target)
                while index1 != -1:
                  list2.append(index1)   #改用列表装位置
                  index1 = file_content.find(target,index1+1)
                if list2 != []:
                  file_dict = list2
            f.close()
            if file_dict != dict():
                keys = file_dict.keys()
                keys = sorted(keys)
                print('在文件[%s]发现关键字[%s]' %(os.path.join(path,each),target))
                for file_keys in keys:
                  print ('在文件第%d行,第【%s】位置出现'%(file_keys,str(file_dict)))
            elif os.path.isdir(each):
                test1(os.path.join(path,each),target)
                os.chdir('..')
path = input('输入查询的初始路径:')
target = input('输入查询的关键字:')
test1(path,target)

杨东明 发表于 2021-6-26 17:08:15

我输入path为D:\\QQ下载,这个目录下我创建了一个文本,输入了关键字并保存,检测出来了,D:\\QQ下载\\123,这个子目录下我也创建了一个一样的文本,但是代码检测不到,也不报错,请问啥原因这是。。?

杨东明 发表于 2021-6-26 17:08:47

题目是:编写一个程序,用户输入关键字,查找当前文件夹内(如果当前文件夹内包含文件夹,则进入文件夹继续搜索)所有含有该关键字的文本文件(.txt后缀),要求显示该文件所在的位置以及关键字在文件中的具体位置(第几行第几个字符)

杨东明 发表于 2021-6-26 17:15:27

elif缩进错行了。。。{:9_240:}

杨东明 发表于 2021-6-26 17:17:08

不能自己采纳自己啊{:9_220:}

杨东明 发表于 2021-6-26 17:18:13

代码一多就容易脑子乱

Twilight6 发表于 2021-6-26 17:22:37

杨东明 发表于 2021-6-26 17:15
elif缩进错行了。。。


除了 elif 缩进 还有个小问题,建议改成这样, open 中不用打开完整路径,否则填 . 时会报错

import os

def test1(path,target):
    os.chdir(path)
    list1 = os.listdir('.')
    for each in list1:
      tuple1 = os.path.splitext(each)
      if not os.path.isdir(each) and tuple1 =='.txt':
            file_dict = dict()# 创建空的字典
            f = open(each,encoding='utf-8')
            count1 = 0 #行数
            for file_content in f:
                list2 = []
                count1 += 1
                index1 = file_content.find(target)
                while index1 != -1:
                  list2.append(index1)   #改用列表装位置
                  index1 = file_content.find(target,index1+1)
                if list2 != []:
                  file_dict = list2
            f.close()
            if file_dict != dict():
                keys = file_dict.keys()
                keys = sorted(keys)
                print('在文件[%s]发现关键字[%s]' %(os.path.join(path,each),target))
                for file_keys in keys:
                  print ('在文件第%d行,第【%s】位置出现'%(file_keys,str(file_dict)))
      elif os.path.isdir(each):
            test1(os.path.join(path,each),target)
            os.chdir('..')
path = input('输入查询的初始路径:')
target = input('输入查询的关键字:')
test1(path,target)

杨东明 发表于 2021-6-27 09:12:29

Twilight6 发表于 2021-6-26 17:22
除了 elif 缩进 还有个小问题,建议改成这样, open 中不用打开完整路径,否则填 . 时会报错

谢谢谢谢{:9_226:}
页: [1]
查看完整版本: 请问代码为啥检测不出子文件夹里的文本。。