鱼C论坛

 找回密码
 立即注册
查看: 1609|回复: 6

[已解决]代码编写问题

[复制链接]
发表于 2020-8-27 12:15:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
https://fishc.com.cn/thread-45649-1-2.html
课后作业4

运行时会报错,请问问题出在哪?

import os

def search_file(start_dir,target):
    os.chdir(os.curdir)

    for each_file in os.listdir(os.curdir):
        ext = os.path.splitext(each_file)[1]
        if ext == '.txt':
            file_path = os.getcwd()+os.sep+each_file
            file = open(file_path)
            line_number = 0
            title = 1
            for each_line in file:
                line_number+=1
                target_number = []
                if target in each_line:
                    begin = each_line.find(target)
                    while begin != -1:
                        target_number.append(begin+1)
                        begin = line.find(target,begin+1)
                if target_number:
                    if title:
                        print('='*90)
                        print('在文件【%s】中找到关键字【%s】' % (file_path,target))
                        title = 0
                    if choice in ['YES','Yes','yes']:
                        print('关键字出现在第 %d 行,第 %s 个位置' % (line_number,str(target_number)))
        elif os.path.isdir(each_file):
            search_file(each_file,target)
            os.chdir(os.pardir)


target = input('请将该脚本放于待查找的文件夹内,请输入关键字:')
choice = input('请问是否需要打印关键字【%s】在文件夹中的具体位置(YES/NO):' % target)
search_file(os.curdir,target)
最佳答案
2020-8-27 15:45:13
Tom学编程 发表于 2020-8-27 15:41
我已经把所有的.txt文档编码格式调为ANSI,所以不存在第一个问题。
它报的错误是:

看了下,是无限循环了,下面elif那。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-27 14:02:11 | 显示全部楼层
下面是在你代码基础上做修改的,已备注。需要注意python默认gbk解码,txt一般默认utf-8,所以根据你的文件编码格式做调整。你可以打开txt文档,另存的时候看下下方的编码是什么。
另一个是基础错误...上下变量不一致;
import os

def search_file(start_dir,target):
    os.chdir(os.curdir)

    for each_file in os.listdir(os.curdir):
        ext = os.path.splitext(each_file)[1]
        if ext == '.txt':
            file_path = os.getcwd()+os.sep+each_file
            file = open(file_path,encoding='utf-8')             #修改,解码格式utf-8
            print(file_path)
            line_number = 0
            title = 1
            for each_line in file:
                line_number+=1
                target_number = []
                if target in each_line:
                    begin = each_line.find(target)
                    while begin != -1:
                        target_number.append(begin+1)
                        begin = each_line.find(target,begin+1)  #修改,不是line,是each_line
                if target_number:
                    if title:
                        print('='*90)
                        print('在文件【%s】中找到关键字【%s】' % (file_path,target))
                        title = 0
                    if choice in ['YES','Yes','yes']:
                        print('关键字出现在第 %d 行,第 %s 个位置' % (line_number,str(target_number)))
        elif os.path.isdir(each_file):
            search_file(each_file,target)
            os.chdir(os.pardir)


target = input('请将该脚本放于待查找的文件夹内,请输入关键字:')
choice = input('请问是否需要打印关键字【%s】在文件夹中的具体位置(YES/NO):' % target)
search_file(os.curdir,target)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-27 15:41:40 | 显示全部楼层
yhhpf 发表于 2020-8-27 14:02
下面是在你代码基础上做修改的,已备注。需要注意python默认gbk解码,txt一般默认utf-8,所以根据你的文件 ...

我已经把所有的.txt文档编码格式调为ANSI,所以不存在第一个问题。
它报的错误是:
RecursionError: maximum recursion depth exceeded in comparison
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-27 15:44:08 | 显示全部楼层
Tom学编程 发表于 2020-8-27 15:41
我已经把所有的.txt文档编码格式调为ANSI,所以不存在第一个问题。
它报的错误是:

超过递归最大深度了,你看下是否无限循环了,或者文件太大。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-27 15:44:38 | 显示全部楼层
我知道哪错了,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-27 15:45:13 | 显示全部楼层    本楼为最佳答案   
Tom学编程 发表于 2020-8-27 15:41
我已经把所有的.txt文档编码格式调为ANSI,所以不存在第一个问题。
它报的错误是:

看了下,是无限循环了,下面elif那。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-27 15:51:42 | 显示全部楼层
Tom学编程 发表于 2020-8-27 15:44
我知道哪错了,谢谢!


额,找了下以前自己写的,你看下有用不。
记得给个最佳哦0.0哈哈
##用户输入目标文件,需要替换的文本,需要替换的内容,输出替换后的结果;
def file_replace(file_name,old,new):
    #打开文件,查找出那些需要替换,并记录下来
    f = open(file_name,encoding='utf-8')
    txt = []
    count = 0
    for each_line in f:
        if old in each_line:
            count += each_line.count(old)
            each_line = each_line.replace(old,new)
        txt.append(each_line)
    decide = input('\n文件%s中共有%s处需要替换\n您确定要将【%s】替换为【%s】么?\n请输入【YES/NO】:' \
                   % (file_name,count,old,new))
    if decide in ["YES",'yes','Yes']:
        f_write = open(file_name,'w',encoding='utf-8')
        f_write.writelines(txt)
        f_write.close()
    else:
        print('未替换,程序结束')
    f.close()

file_name = input('请输入需要替换内容的模板文件名:')
old = input('请输入需要更换的内容:')
new = input('请输入需要更换为:')
file_replace(file_name,old,new)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-19 03:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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