Tom学编程 发表于 2020-8-27 12:15:08

代码编写问题

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)
      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)

yhhpf 发表于 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)
      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)

Tom学编程 发表于 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

yhhpf 发表于 2020-8-27 15:44:08

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

超过递归最大深度了,你看下是否无限循环了,或者文件太大。

Tom学编程 发表于 2020-8-27 15:44:38

我知道哪错了,谢谢!

yhhpf 发表于 2020-8-27 15:45:13

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

看了下,是无限循环了,下面elif那。

yhhpf 发表于 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)
页: [1]
查看完整版本: 代码编写问题