大地郡主 发表于 2020-7-16 18:38:43

一段代码的问题,请求帮助

请求帮助,看了两个小时了这点代码改不对
import os
import os.path as op

def find_name(name):
    all_file = os.listdir(os.curdir)
    for each_file in all_file:
      if op.splitext(each_file) == '.txt':
            f1 = open(each_file,'r')
            count = 0
            if name in each_file:
                print('在文件【%s】中找到关键字【%s】'%(each_file,name))
            for each_line in f1:
                count += 1
                if name in each_line:
                  print('关键字出现在%d行,第%s个位置'%(count,find_name(name,each_line)))
            f1.close()                  
      if op.isdir(each_file):
            find_name(each_file)
            os.chdir(os.pardir)

def find_num(name, string):
    where = []
    index = string.find(name)
    while index != -1:
      where.append(index + 1)
      index = string.find(name, index+1)
    return where

name1 = input('请将该脚本防御带查找的文件夹内,请输入关键字:')
choice = input('请问是否要打印关键字【%s】在文件夹中的具体位置(YES/NO):'%(name1))
if choice == 'YES'or choice == 'yes':
    find_name(name1)


一直报我递归的错。。。。18 行和 32 行

Twilight6 发表于 2020-7-16 18:38:44

本帖最后由 Twilight6 于 2020-7-16 20:17 编辑

大地郡主 发表于 2020-7-16 19:06
不是小甲鱼的源码,是我在写他的作业,改了还是不行,肯定是代码有问题



代码很多错误,帮你改了,你自己对照着看看吧:

import os
import os.path as op

def find_name(name):
    all_file = os.listdir(os.curdir)
    for each_file in all_file:
      if op.splitext(each_file) == '.txt':
            f1 = open(each_file)
            count = 0
            temp = []
            file_path = True
            for each_line in f1:
                count += 1
                if name in each_line:
                  temp = find_num(name,each_line)
                if temp != []:
                  if file_path:
                        print('|----文件 %s' % os.getcwd() + op.sep + each_file)
                        file_path = False
                  print('|-关键字出现在%d行,第%s个位置' % (count,temp))
            f1.close()
      if op.isdir(each_file):
            os.chdir(each_file)
            find_name(name)
            os.chdir(os.pardir)

def find_num(name, string):
    where = []
    index = string.find(name)
    while index != -1:
      where.append(index + 1)
      index = string.find(name, index+1)
    return where

name1 = input('请将该脚本防御带查找的文件夹内,请输入关键字:')
choice = input('请问是否要打印关键字【%s】在文件夹中的具体位置(YES/NO):'%(name1))
if choice == 'YES'or choice == 'yes':
    find_name(name1)

_2_ 发表于 2020-7-16 18:52:26

请把报错信息发上来

大地郡主 发表于 2020-7-16 18:53:14

_2_ 发表于 2020-7-16 18:52
请把报错信息发上来

Traceback (most recent call last):
File "E:/测试代码/030 4.py", line 32, in <module>
    find_name(name1)
File "E:/测试代码/030 4.py", line 18, in find_name
    find_name(each_file)
File "E:/测试代码/030 4.py", line 18, in find_name
    find_name(each_file)
File "E:/测试代码/030 4.py", line 18, in find_name
    find_name(each_file)

File "E:/测试代码/030 4.py", line 7, in find_name
    if op.splitext(each_file) == '.txt':
File "C:\Users\巴鲁斯\AppData\Local\Programs\Python\Python38\lib\ntpath.py", line 208, in splitext
    return genericpath._splitext(p, '\\', '/', '.')
File "C:\Users\巴鲁斯\AppData\Local\Programs\Python\Python38\lib\genericpath.py", line 131, in _splitext
    sepIndex = max(sepIndex, altsepIndex)
RecursionError: maximum recursion depth exceeded in comparison

_2_ 发表于 2020-7-16 18:55:31

大地郡主 发表于 2020-7-16 18:53
Traceback (most recent call last):
File "E:/测试代码/030 4.py", line 32, in
    find_name(nam ...

你超过了最大递归深度
找一个相对文件较少的目录(os.chdir())或者修改递归深度(sys)

大地郡主 发表于 2020-7-16 19:00:27

_2_ 发表于 2020-7-16 18:55
你超过了最大递归深度
找一个相对文件较少的目录(os.chdir())或者修改递归深度(sys)

可是我专门建立了一个文件,里面只有三个文本文件,这段代码.py文件,还有一个文件夹,文件夹里也只有一个文本文件,这应该不会超深度阿

zltzlt 发表于 2020-7-16 19:01:47

大地郡主 发表于 2020-7-16 18:53
Traceback (most recent call last):
File "E:/测试代码/030 4.py", line 32, in
    find_name(nam ...

在程序开头加上这两句试试?

import sys
sys.setrecursionlimit(9999999)

_2_ 发表于 2020-7-16 19:02:49

大地郡主 发表于 2020-7-16 19:00
可是我专门建立了一个文件,里面只有三个文本文件,这段代码.py文件,还有一个文件夹,文件夹里也只有一 ...

应该是递归逻辑有点问题(是不是小甲鱼的源码?)
总感觉报 超出递归深度 有点蹊跷
要不还是改一下递归深度吧(sys)

大地郡主 发表于 2020-7-16 19:05:58

zltzlt 发表于 2020-7-16 19:01
在程序开头加上这两句试试?

不行,加了后什么都打不出来,应该是在递归出不来了

大地郡主 发表于 2020-7-16 19:06:51

_2_ 发表于 2020-7-16 19:02
应该是递归逻辑有点问题(是不是小甲鱼的源码?)
总感觉报 超出递归深度 有点蹊跷
要不还是改一下递归深 ...

不是小甲鱼的源码,是我在写他的作业{:10_243:},改了还是不行,肯定是代码有问题

大地郡主 发表于 2020-7-16 20:29:31

谢谢您,帮了我好几次了{:10_281:}
页: [1]
查看完整版本: 一段代码的问题,请求帮助