鱼C论坛

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

[已解决]代码编写问题

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

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

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

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

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


  1. import os

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

  4.     for each_file in os.listdir(os.curdir):
  5.         ext = os.path.splitext(each_file)[1]
  6.         if ext == '.txt':
  7.             file_path = os.getcwd()+os.sep+each_file
  8.             file = open(file_path)
  9.             line_number = 0
  10.             title = 1
  11.             for each_line in file:
  12.                 line_number+=1
  13.                 target_number = []
  14.                 if target in each_line:
  15.                     begin = each_line.find(target)
  16.                     while begin != -1:
  17.                         target_number.append(begin+1)
  18.                         begin = line.find(target,begin+1)
  19.                 if target_number:
  20.                     if title:
  21.                         print('='*90)
  22.                         print('在文件【%s】中找到关键字【%s】' % (file_path,target))
  23.                         title = 0
  24.                     if choice in ['YES','Yes','yes']:
  25.                         print('关键字出现在第 %d 行,第 %s 个位置' % (line_number,str(target_number)))
  26.         elif os.path.isdir(each_file):
  27.             search_file(each_file,target)
  28.             os.chdir(os.pardir)


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

看了下,是无限循环了,下面elif那。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

  4.     for each_file in os.listdir(os.curdir):
  5.         ext = os.path.splitext(each_file)[1]
  6.         if ext == '.txt':
  7.             file_path = os.getcwd()+os.sep+each_file
  8.             file = open(file_path,encoding='utf-8')             #修改,解码格式utf-8
  9.             print(file_path)
  10.             line_number = 0
  11.             title = 1
  12.             for each_line in file:
  13.                 line_number+=1
  14.                 target_number = []
  15.                 if target in each_line:
  16.                     begin = each_line.find(target)
  17.                     while begin != -1:
  18.                         target_number.append(begin+1)
  19.                         begin = each_line.find(target,begin+1)  #修改,不是line,是each_line
  20.                 if target_number:
  21.                     if title:
  22.                         print('='*90)
  23.                         print('在文件【%s】中找到关键字【%s】' % (file_path,target))
  24.                         title = 0
  25.                     if choice in ['YES','Yes','yes']:
  26.                         print('关键字出现在第 %d 行,第 %s 个位置' % (line_number,str(target_number)))
  27.         elif os.path.isdir(each_file):
  28.             search_file(each_file,target)
  29.             os.chdir(os.pardir)


  30. target = input('请将该脚本放于待查找的文件夹内,请输入关键字:')
  31. choice = input('请问是否需要打印关键字【%s】在文件夹中的具体位置(YES/NO):' % target)
  32. search_file(os.curdir,target)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

我已经把所有的.txt文档编码格式调为ANSI,所以不存在第一个问题。
它报的错误是:
  1. RecursionError: maximum recursion depth exceeded in comparison
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

超过递归最大深度了,你看下是否无限循环了,或者文件太大。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-27 15:44:38 | 显示全部楼层
我知道哪错了,谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

看了下,是无限循环了,下面elif那。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

  21. file_name = input('请输入需要替换内容的模板文件名:')
  22. old = input('请输入需要更换的内容:')
  23. new = input('请输入需要更换为:')
  24. file_replace(file_name,old,new)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-26 07:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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