鱼C论坛

 找回密码
 立即注册
查看: 1575|回复: 10

[已解决]一段代码的问题,请求帮助

[复制链接]
发表于 2020-7-16 18:38:43 | 显示全部楼层 |阅读模式
9鱼币
请求帮助,看了两个小时了这点代码改不对
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)[1] == '.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 行
最佳答案
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)[1] == '.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)

最佳答案

查看完整内容

代码很多错误,帮你改了,你自己对照着看看吧:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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)[1] == '.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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-16 18:52:26 From FishC Mobile | 显示全部楼层
请把报错信息发上来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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)
  [Previous line repeated 1017 more times]
  File "E:/测试代码/030 4.py", line 7, in find_name
    if op.splitext(each_file)[1] == '.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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-16 18:55:31 From FishC Mobile | 显示全部楼层
大地郡主 发表于 2020-7-16 18:53
Traceback (most recent call last):
  File "E:/测试代码/030 4.py", line 32, in
    find_name(nam ...

你超过了最大递归深度
找一个相对文件较少的目录(os.chdir())或者修改递归深度(sys)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-16 19:00:27 | 显示全部楼层
_2_ 发表于 2020-7-16 18:55
你超过了最大递归深度
找一个相对文件较少的目录(os.chdir())或者修改递归深度(sys)

可是我专门建立了一个文件,里面只有三个文本文件,这段代码.py文件,还有一个文件夹,文件夹里也只有一个文本文件,这应该不会超深度阿
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-16 19:02:49 From FishC Mobile | 显示全部楼层
大地郡主 发表于 2020-7-16 19:00
可是我专门建立了一个文件,里面只有三个文本文件,这段代码.py文件,还有一个文件夹,文件夹里也只有一 ...

应该是递归逻辑有点问题(是不是小甲鱼的源码?)
总感觉报 超出递归深度 有点蹊跷
要不还是改一下递归深度吧(sys)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-16 19:05:58 | 显示全部楼层
zltzlt 发表于 2020-7-16 19:01
在程序开头加上这两句试试?

不行,加了后什么都打不出来,应该是在递归出不来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

不是小甲鱼的源码,是我在写他的作业,改了还是不行,肯定是代码有问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-16 20:29:31 | 显示全部楼层
谢谢您,帮了我好几次了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-19 23:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表